[PATCH 0/2] MR10750: msado15: Handle BSTR bookmarks in _Recordset::Find.
From: Piotr Caban <piotr@codeweavers.com> --- dlls/msado15/recordset.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index d96411b022a..25232872309 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -3475,14 +3475,20 @@ static HRESULT WINAPI recordset_Find( _Recordset *iface, BSTR criteria, LONG ski V_BSTR(&v) = col; hr = get_accessor( recordset, &v, &hacc ); SysFreeString( col ); - if (SUCCEEDED(hr)) - hr = get_bookmark_data( &start, &bm_data, &bm_len, &int_buf ); if (FAILED(hr)) { SysFreeString( val ); if (free_bookmark) VariantClear( &start ); return hr; } + hr = get_bookmark_data( &start, &bm_data, &bm_len, &int_buf ); + if (FAILED(hr)) + { + IAccessor_ReleaseAccessor( recordset->accessor, hacc, NULL ); + SysFreeString( val ); + if (free_bookmark) VariantClear( &start ); + return hr; + } if (SUCCEEDED(_Recordset_Supports( &recordset->Recordset_iface, adHoldRecords, &b )) && b && SUCCEEDED(IRowset_AddRefRows( recordset->row_set, 1, &recordset->current_row, NULL, NULL ))) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10750
From: Piotr Caban <piotr@codeweavers.com> --- dlls/msado15/recordset.c | 5 +++++ dlls/msado15/tests/msado15.c | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/dlls/msado15/recordset.c b/dlls/msado15/recordset.c index 25232872309..7758f3a6127 100644 --- a/dlls/msado15/recordset.c +++ b/dlls/msado15/recordset.c @@ -269,6 +269,11 @@ static HRESULT get_bookmark_data( VARIANT *bookmark, const BYTE **data, DBBKMARK *data = V_ARRAY(bookmark)->pvData; *len = V_ARRAY(bookmark)->rgsabound[0].cElements; } + else if (V_VT(bookmark) == VT_BSTR) + { + *data = (const BYTE *)V_BSTR(bookmark); + *len = SysStringByteLen(V_BSTR(bookmark)); + } else { WARN("unexpected bookmark %s\n", wine_dbgstr_variant(bookmark)); diff --git a/dlls/msado15/tests/msado15.c b/dlls/msado15/tests/msado15.c index 551d18890f6..29351c035cb 100644 --- a/dlls/msado15/tests/msado15.c +++ b/dlls/msado15/tests/msado15.c @@ -2302,6 +2302,24 @@ static void test_ADORecordsetConstruction(BOOL exact_scroll) ok(hr == MAKE_ADO_HRESULT( adErrItemNotFound ), "got %08lx\n", hr ); if (exact_scroll) CHECK_CALLED(rowset_GetData); + V_VT(&v) = VT_BSTR; + V_BSTR(&v) = SysAllocString( L"" ); + SET_EXPECT(accessor_AddRefAccessor); + SET_EXPECT(rowset_AddRefRows); + SET_EXPECT(rowset_ReleaseRows); + SET_EXPECT(rowset_find_FindNextRow); + if (exact_scroll) SET_EXPECT(rowset_GetData); + SET_EXPECT(accessor_ReleaseAccessor); + hr = _Recordset_Find( recordset, (BSTR)L"Column1 = 1'1", 0, adSearchForward, v ); + ok( hr == S_OK, "got %08lx\n", hr ); + CHECK_CALLED(accessor_AddRefAccessor); + CHECK_CALLED(rowset_AddRefRows); + CHECK_CALLED(rowset_ReleaseRows); + CHECK_CALLED(rowset_find_FindNextRow); + if (exact_scroll) CHECK_CALLED(rowset_GetData); + CHECK_CALLED(accessor_ReleaseAccessor); + VariantClear(&v); + for (i = 0; i < ARRAY_SIZE(find_criteria); i++) { winetest_push_context( "%d", i ); -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/10750
participants (2)
-
Piotr Caban -
Piotr Caban (@piotr)