secur32: fix segfault

Stefan Huehner stefan at huehner.org
Sun Nov 6 11:58:32 CST 2005


Hi,

fix wrong assumption about LIST_FOR_EACH_ENTRY(ret, ... ) returning ret
== NULL after the loop

Changelog:
- fix segfault when querying non-existent SecurityProvider

-------------- next part --------------
Index: dlls/secur32/secur32.c
===================================================================
RCS file: /home/wine/wine/dlls/secur32/secur32.c,v
retrieving revision 1.12
diff -u -p -u -p -r1.12 secur32.c
--- dlls/secur32/secur32.c	30 Aug 2005 08:55:20 -0000	1.12
+++ dlls/secur32/secur32.c	6 Nov 2005 17:56:03 -0000
@@ -573,16 +573,21 @@ static void SECUR32_initializeProviders(
 SecurePackage *SECUR32_findPackageW(PWSTR packageName)
 {
     SecurePackage *ret = NULL;
+    BOOL matched = FALSE;
 
     if (packageTable && packageName)
     {
         LIST_FOR_EACH_ENTRY(ret, &packageTable->table, SecurePackage, entry)
         {
-            if (!lstrcmpiW(ret->infoW.Name, packageName))
-                break;
+            matched = !lstrcmpiW(ret->infoW.Name, packageName);
+	    if (matched)
+		break;
         }
         
-        if (ret && ret->provider && !ret->provider->loaded)
+	if (!matched)
+		return NULL;
+
+	if (ret->provider && !ret->provider->loaded)
         {
             ret->provider->lib = LoadLibraryW(ret->provider->moduleName);
             if (ret->provider->lib)


More information about the wine-patches mailing list