Module: wine Branch: master Commit: 5faa69d3e3b07feb1e21342f17866bdfd0a84980 URL: http://source.winehq.org/git/wine.git/?a=commit;h=5faa69d3e3b07feb1e21342f17...
Author: Alistair Leslie-Hughes leslie_alistair@hotmail.com Date: Thu May 30 12:16:13 2013 +1000
oledb32: DBTYPE_BYTES->DBTYPE_VARIANT only uses the source length.
---
dlls/oledb32/convert.c | 7 ++----- dlls/oledb32/tests/convert.c | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 5 deletions(-)
diff --git a/dlls/oledb32/convert.c b/dlls/oledb32/convert.c index ad97363..4ec687c 100644 --- a/dlls/oledb32/convert.c +++ b/dlls/oledb32/convert.c @@ -950,18 +950,15 @@ static HRESULT WINAPI convert_DataConvert(IDataConvert* iface, case DBTYPE_BYTES: { LONG i; - LONG size; SAFEARRAY *psa = NULL; SAFEARRAYBOUND rgsabound[1]; unsigned char *p = src;
- size = min(src_len, dst_max_len); - rgsabound[0].lLbound = 0; - rgsabound[0].cElements = size; + rgsabound[0].cElements = src_len;
psa = SafeArrayCreate(VT_UI1,1,rgsabound); - for(i =0; i < size; i++,p++) + for(i =0; i < src_len; i++,p++) { hr = SafeArrayPutElement(psa, &i, &p); if(FAILED(hr)) { diff --git a/dlls/oledb32/tests/convert.c b/dlls/oledb32/tests/convert.c index aacacfa..5c6694f 100644 --- a/dlls/oledb32/tests/convert.c +++ b/dlls/oledb32/tests/convert.c @@ -2716,11 +2716,51 @@ static void test_converttovar(void) ok(S(cy2).Lo == S(cy).Lo && S(cy2).Hi == S(cy).Hi, "got %d,%d\n", S(cy2).Lo, S(cy2).Hi);
dst_len = 0x1234; + hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_VARIANT, sizeof(byte_src), &dst_len, &byte_src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0); + ok(hr == S_OK, "got %08x\n", hr); + ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status); + ok(dst_len == sizeof(dst), "got %ld\n", dst_len); + ok(V_VT(&dst) == (VT_ARRAY|VT_UI1), "got %d\n", V_VT(&dst)); + if(V_VT(&dst) == (VT_ARRAY|VT_UI1)) + { + LONG l; + + hr = SafeArrayGetUBound(V_ARRAY(&dst), 1, &l); + ok(hr == S_OK, "got %08x\n", hr); + ok(l == 4, "got %d\n", l); /* 5 elements */ + } + VariantClear(&dst); + + dst_len = 0x1234; hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_VARIANT, 0, &dst_len, &byte_src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0); ok(hr == S_OK, "got %08x\n", hr); ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status); ok(dst_len == sizeof(dst), "got %ld\n", dst_len); ok(V_VT(&dst) == (VT_ARRAY|VT_UI1), "got %d\n", V_VT(&dst)); + if(V_VT(&dst) == (VT_ARRAY|VT_UI1)) + { + LONG l; + + hr = SafeArrayGetUBound(V_ARRAY(&dst), 1, &l); + ok(hr == S_OK, "got %08x\n", hr); + ok(l == -1, "got %d\n", l); /* 0 elements */ + } + VariantClear(&dst); + + dst_len = 0x1234; + hr = IDataConvert_DataConvert(convert, DBTYPE_BYTES, DBTYPE_VARIANT, 2, &dst_len, &byte_src, &dst, sizeof(dst), 0, &dst_status, 0, 0, 0); + ok(hr == S_OK, "got %08x\n", hr); + ok(dst_status == DBSTATUS_S_OK, "got %08x\n", dst_status); + ok(dst_len == sizeof(dst), "got %ld\n", dst_len); + ok(V_VT(&dst) == (VT_ARRAY|VT_UI1), "got %d\n", V_VT(&dst)); + if(V_VT(&dst) == (VT_ARRAY|VT_UI1)) + { + LONG l; + + hr = SafeArrayGetUBound(V_ARRAY(&dst), 1, &l); + ok(hr == S_OK, "got %08x\n", hr); + ok(l == 1, "got %d\n", l); /* 2 elements */ + } VariantClear(&dst);
dst_len = 0x1234;