[PATCH 8/9] adsldp: Fix IDirectorySearch::GetColumn() behaviour for not found case.

Dmitry Timoshkov dmitry at baikal.ru
Mon Mar 30 02:34:03 CDT 2020


Signed-off-by: Dmitry Timoshkov <dmitry at baikal.ru>
---
 dlls/adsldp/adsldp.c     |  6 +++++-
 dlls/adsldp/tests/ldap.c | 12 ++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)

diff --git a/dlls/adsldp/adsldp.c b/dlls/adsldp/adsldp.c
index d9282cf239..9d19211ddf 100644
--- a/dlls/adsldp/adsldp.c
+++ b/dlls/adsldp/adsldp.c
@@ -1435,7 +1435,11 @@ exit:
     }
 
     values = ldap_get_values_lenW(ldap->ld, ldap_ctx->entry, name);
-    if (!values) return ERROR_DS_NO_ATTRIBUTE_OR_VALUE;
+    if (!values)
+    {
+        memset(col, 0, sizeof(*col));
+        return E_ADS_COLUMN_NOT_SET;
+    }
 
     count = ldap_count_values_len(values);
 
diff --git a/dlls/adsldp/tests/ldap.c b/dlls/adsldp/tests/ldap.c
index 3abbbdadb0..aec5bf89ee 100644
--- a/dlls/adsldp/tests/ldap.c
+++ b/dlls/adsldp/tests/ldap.c
@@ -417,6 +417,18 @@ todo_wine
     ok(hr == E_ADS_BAD_PARAMETER, "got %#x\n", hr);
     }
 
+    hr = IDirectorySearch_GetFirstRow(ds, sh);
+    ok(hr == S_OK, "got %#x\n", hr);
+
+    memset(&col, 0x55, sizeof(col));
+    hr = IDirectorySearch_GetColumn(ds, sh, (WCHAR *)L"deadbeef", &col);
+    ok(hr == E_ADS_COLUMN_NOT_SET, "got %#x\n", hr);
+    ok(!col.pszAttrName, "got %p\n", col.pszAttrName);
+    ok(col.dwADsType == ADSTYPE_INVALID || broken(col.dwADsType != ADSTYPE_INVALID) /* XP */, "got %d\n", col.dwADsType);
+    ok(!col.pADsValues, "got %p\n", col.pADsValues);
+    ok(!col.dwNumValues, "got %u\n", col.dwNumValues);
+    ok(!col.hReserved, "got %p\n", col.hReserved);
+
     hr = IDirectorySearch_CloseSearchHandle(ds, sh);
     ok(hr == S_OK, "got %#x\n", hr);
 
-- 
2.25.1




More information about the wine-devel mailing list