[WS2_32] Use SEH in WSCGetProviderPath()
authorPierre Schweitzer <pierre@reactos.org>
Sat, 23 Feb 2019 12:34:28 +0000 (13:34 +0100)
committerPierre Schweitzer <pierre@reactos.org>
Sat, 23 Feb 2019 12:35:07 +0000 (13:35 +0100)
dll/win32/ws2_32/src/enumprot.c

index a47b290..be1ff59 100644 (file)
@@ -350,52 +350,60 @@ WSCGetProviderPath(IN LPGUID lpProviderId,
     /* Get the catalog */
     Catalog = WsProcGetNsCatalog(Process);
 
-    /* Setup the context */
-    Context.ProviderId = *lpProviderId;
-    Context.ProviderDllPath = lpszProviderDllPath;
-    Context.ProviderDllPathLen = *lpProviderDllPathLen;
-    Context.FoundPathLen = 0;
-    Context.Found = 0;
-    Context.ErrorCode = ERROR_SUCCESS;
+    _SEH2_TRY
+    {
+        /* Setup the context */
+        Context.ProviderId = *lpProviderId;
+        Context.ProviderDllPath = lpszProviderDllPath;
+        Context.ProviderDllPathLen = *lpProviderDllPathLen;
+        Context.FoundPathLen = 0;
+        Context.Found = 0;
+        Context.ErrorCode = ERROR_SUCCESS;
 
-    ErrorCode = ERROR_SUCCESS;
+        ErrorCode = ERROR_SUCCESS;
 
-    /* Enumerate the catalog */
-    WsNcEnumerateCatalogItems(Catalog, ProviderEnumerationProc, &Context);
+        /* Enumerate the catalog */
+        WsNcEnumerateCatalogItems(Catalog, ProviderEnumerationProc, &Context);
 
-    /* Check the error code */
-    if (Context.ErrorCode == ERROR_SUCCESS)
-    {
-        /* Check if provider was found */
-        if (Context.Found)
+        /* Check the error code */
+        if (Context.ErrorCode == ERROR_SUCCESS)
         {
-            PathLen = Context.FoundPathLen;
-
-            /* Check whether buffer is too small
-             * If it isn't, return length without null char
-             * (see ProviderEnumerationProc)
-             */
-            if (Context.FoundPathLen <= *lpProviderDllPathLen)
+            /* Check if provider was found */
+            if (Context.Found)
             {
-                PathLen = Context.FoundPathLen - 1;
+                PathLen = Context.FoundPathLen;
+
+                /* Check whether buffer is too small
+                 * If it isn't, return length without null char
+                 * (see ProviderEnumerationProc)
+                 */
+                if (Context.FoundPathLen <= *lpProviderDllPathLen)
+                {
+                    PathLen = Context.FoundPathLen - 1;
+                }
+                else
+                {
+                    ErrorCode = WSAEFAULT;
+                }
+
+                /* Set returned/required length */
+                *lpProviderDllPathLen = PathLen;
             }
             else
             {
-                ErrorCode = WSAEFAULT;
+                ErrorCode = WSAEINVAL;
             }
-
-            /* Set returned/required length */
-            *lpProviderDllPathLen = PathLen;
         }
         else
         {
-            ErrorCode = WSAEINVAL;
+            ErrorCode = Context.ErrorCode;
         }
     }
-    else
+    _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
     {
-        ErrorCode = Context.ErrorCode;
+        ErrorCode = WSAEFAULT;
     }
+    _SEH2_END;
 
     /* Do we have to return failure? */
     if (ErrorCode != ERROR_SUCCESS)