From: Alistair Leslie-Hughes Subject: [PATCH] oledb32: Support DBTYPE_I4->DBTYPE_WSTR in GetConversionSize Message-Id: Date: Tue, 13 Jun 2017 04:09:54 +0000 dst_len cannot be set to 110 beacuse we don't have any idea of how this value is set. Signed-off-by: Alistair Leslie-Hughes --- dlls/oledb32/convert.c | 5 +++++ dlls/oledb32/tests/convert.c | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index 0d45ef0..bf01101 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -1401,6 +1401,11 @@ static HRESULT WINAPI convert_GetConversionSize(IDataConvert* iface, case DBTYPE_WSTR: switch (src_type) { + case DBTYPE_I4: + { + /* Return S_OK to signal we can convert from this type. On windows, dst_len is set to 110. */ + break; + } case DBTYPE_VARIANT: { VARIANT v; diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c index 116ca16..d07ebf1 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2715,6 +2715,7 @@ static void test_getconversionsize(void) VARIANT var; SAFEARRAY *psa = NULL; SAFEARRAYBOUND rgsabound[1]; + int i4; /* same way as CanConvert fails here */ dst_len = 0; @@ -2834,6 +2835,17 @@ static void test_getconversionsize(void) ok(dst_len == 1802, "%ld\n", dst_len); VariantClear(&var); + /* A value of 110 is returned in dst_len */ + dst_len = 0; + src_len = sizeof(i4); + i4 = 200; + hr = IDataConvert_GetConversionSize(convert, DBTYPE_I4, DBTYPE_WSTR, &src_len, &dst_len, &i4); + ok(hr == S_OK, "got 0x%08x\n", hr); + + dst_len = 0; + hr = IDataConvert_GetConversionSize(convert, DBTYPE_I4, DBTYPE_WSTR, NULL, &dst_len, NULL); + ok(hr == S_OK, "got 0x%08x\n", hr); + /* On Windows, NULL variants being convert to a non-fixed sized type will return a dst_len of * 110 but we aren't testing for this value. */ -- 1.9.1