winspool: Fix a leak in DocumentPropertiesA (valgrind) (try 2)

Bruno Jesus 00cpxxx at gmail.com
Mon Jul 7 19:12:25 CDT 2014


try 2:

Use a more clear approach.

Fixes bug https://bugs.winehq.org/show_bug.cgi?id=36810
-------------- next part --------------
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index bfb22cb..73323f8 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -2361,7 +2361,7 @@ LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,
                                 LPSTR pDeviceName, LPDEVMODEA pDevModeOutput,
 				LPDEVMODEA pDevModeInput,DWORD fMode )
 {
-    LPSTR lpName = pDeviceName;
+    LPSTR lpName = pDeviceName, dupname = NULL;
     static CHAR port[] = "LPT1:";
     LONG ret;
 
@@ -2376,7 +2376,7 @@ LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,
                 SetLastError(ERROR_INVALID_HANDLE);
 		return -1;
 	}
-	lpName = strdupWtoA(lpNameW);
+	lpName = dupname = strdupWtoA(lpNameW);
     }
 
     if (!GDI_CallExtDeviceMode16)
@@ -2385,14 +2385,15 @@ LONG WINAPI DocumentPropertiesA(HWND hWnd,HANDLE hPrinter,
                                                          (LPCSTR)102 );
         if (!GDI_CallExtDeviceMode16) {
 		ERR("No CallExtDeviceMode16?\n");
-		return -1;
+		ret = -1;
+		goto end;
 	}
     }
     ret = GDI_CallExtDeviceMode16(hWnd, pDevModeOutput, lpName, port,
 				  pDevModeInput, NULL, fMode);
 
-    if(!pDeviceName)
-        HeapFree(GetProcessHeap(),0,lpName);
+end:
+    HeapFree(GetProcessHeap(), 0, dupname);
     return ret;
 }
 


More information about the wine-patches mailing list