Alexandre Julliard : winspool.drv: Don' t crash if the ppd directory cannot be created.

Alexandre Julliard julliard at wine.codeweavers.com
Wed Dec 17 16:32:34 CST 2014


Module: wine
Branch: master
Commit: f1aea67d9578a1fcbc5f7ca13fb5424b7b36be43
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=f1aea67d9578a1fcbc5f7ca13fb5424b7b36be43

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Wed Dec 17 17:10:50 2014 +0100

winspool.drv: Don't crash if the ppd directory cannot be created.

---

 dlls/winspool.drv/info.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index 073a8fb..7653d2f 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -946,7 +946,11 @@ static BOOL CUPS_LoadPrinters(void)
         } else {
             BOOL added_driver = FALSE;
 
-            if (!ppd_dir) ppd_dir = get_ppd_dir();
+            if (!ppd_dir && !(ppd_dir = get_ppd_dir()))
+            {
+                HeapFree( GetProcessHeap(), 0, port );
+                break;
+            }
             ppd = get_ppd_filename( ppd_dir, nameW );
             if (get_cups_ppd( dests[i].name, ppd ))
             {
@@ -1098,7 +1102,11 @@ static BOOL update_driver( HANDLE printer )
     queue_name = get_queue_name( printer, &is_cups );
     if (!queue_name) return FALSE;
 
-    ppd_dir = get_ppd_dir();
+    if (!(ppd_dir = get_ppd_dir()))
+    {
+        HeapFree( GetProcessHeap(), 0, queue_name );
+        return FALSE;
+    }
     ppd = get_ppd_filename( ppd_dir, name );
 
 #ifdef SONAME_LIBCUPS
@@ -1224,7 +1232,7 @@ static BOOL PRINTCAP_ParseEntry( const char *pent, BOOL isfirst )
                     sep_file[]    = "<sep file?>";
         BOOL added_driver = FALSE;
 
-        if (!ppd_dir) ppd_dir = get_ppd_dir();
+        if (!ppd_dir && !(ppd_dir = get_ppd_dir())) goto end;
         ppd = get_ppd_filename( ppd_dir, devnameW );
         if (get_fallback_ppd( devname, ppd ))
         {




More information about the wine-cvs mailing list