Alistair Leslie-Hughes : msado15: Convert to Integer for field index.

Alexandre Julliard julliard at winehq.org
Wed Jun 9 16:43:05 CDT 2021


Module: wine
Branch: master
Commit: f6fc0e2b7722e5fe3c6bdfb31101ac5ef1c39670
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=f6fc0e2b7722e5fe3c6bdfb31101ac5ef1c39670

Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date:   Wed Jun  9 16:41:32 2021 +1000

msado15: Convert to Integer for field index.

Thanks Gabriel Ivăncescu.

Signed-off-by: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Signed-off-by: Hans Leidekker <hans at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/msado15/recordset.c     | 24 ++++++++++--------------
 dlls/msado15/tests/msado15.c | 17 +++++++++++++++++
 2 files changed, 27 insertions(+), 14 deletions(-)

diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c
index 7cd943f55d5..92a0deb6959 100644
--- a/dlls/msado15/recordset.c
+++ b/dlls/msado15/recordset.c
@@ -740,28 +740,24 @@ static HRESULT map_index( struct fields *fields, VARIANT *index, ULONG *ret )
 {
     ULONG i;
 
-    if (V_VT( index ) == VT_I4 || V_VT( index ) == VT_I2)
+    if (V_VT( index ) != VT_BSTR)
     {
-        if (V_VT( index ) == VT_I4)
-            i = V_I4 ( index );
-        else
-            i = V_I2 ( index );
+        VARIANT idx;
 
-        if (i < fields->count)
+        VariantInit(&idx);
+        if (VariantChangeType(&idx, index, 0, VT_UI4) == S_OK)
         {
-            *ret = i;
-            return S_OK;
+            i = V_UI4 ( &idx );
+            if (i < fields->count)
+            {
+                *ret = i;
+                return S_OK;
+            }
         }
 
         return MAKE_ADO_HRESULT(adErrItemNotFound);
     }
 
-    if (V_VT( index ) != VT_BSTR)
-    {
-        FIXME( "variant type %u not supported\n", V_VT( index ) );
-        return E_INVALIDARG;
-    }
-
     for (i = 0; i < fields->count; i++)
     {
         BSTR name;
diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c
index 860144338c0..25c9c6f8356 100644
--- a/dlls/msado15/tests/msado15.c
+++ b/dlls/msado15/tests/msado15.c
@@ -150,6 +150,23 @@ static void test_Recordset(void)
     ok( hr == S_OK, "got %08x\n", hr );
     Field_Release(field);
 
+    V_VT( &index ) = VT_I1;
+    V_I1( &index ) = 0;
+    hr = Fields_get_Item( fields, index, &field );
+    ok( hr == S_OK, "got %08x\n", hr );
+    Field_Release(field);
+
+    V_VT( &index ) = VT_R8;
+    V_R8( &index ) = 0.1;
+    hr = Fields_get_Item( fields, index, &field );
+    ok( hr == S_OK, "got %08x\n", hr );
+    Field_Release(field);
+
+    V_VT( &index ) = VT_UNKNOWN;
+    V_UNKNOWN( &index ) = NULL;
+    hr = Fields_get_Item( fields, index, &field );
+    ok( hr == MAKE_ADO_HRESULT(adErrItemNotFound), "got %08x\n", hr );
+
     V_VT( &index ) = VT_BSTR;
     V_BSTR( &index ) = name;
     hr = Fields_get_Item( fields, index, &field );




More information about the wine-cvs mailing list