Detlef Riekenberg : winspool: Move more parameter-checks for EnumMonitorsW to localspl.

Alexandre Julliard julliard at winehq.org
Fri Jul 11 08:44:37 CDT 2008


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

Author: Detlef Riekenberg <wine.dev at web.de>
Date:   Thu Jul 10 23:42:55 2008 +0200

winspool: Move more parameter-checks for EnumMonitorsW to localspl.

---

 dlls/localspl/localspl_main.c |   10 ++++++----
 dlls/winspool.drv/info.c      |   10 +---------
 2 files changed, 7 insertions(+), 13 deletions(-)

diff --git a/dlls/localspl/localspl_main.c b/dlls/localspl/localspl_main.c
index b27ae7d..cf208f0 100644
--- a/dlls/localspl/localspl_main.c
+++ b/dlls/localspl/localspl_main.c
@@ -736,6 +736,12 @@ BOOL WINAPI fpEnumMonitors(LPWSTR pName, DWORD Level, LPBYTE pMonitors, DWORD cb
         goto em_cleanup;
     }
 
+    if (!Level || (Level > 2)) {
+        WARN("level (%d) is ignored in win9x\n", Level);
+        SetLastError(ERROR_INVALID_LEVEL);
+        return FALSE;
+    }
+
     /* Scan all Monitor-Keys */
     numentries = 0;
     needed = get_local_monitors(Level, NULL, 0, &numentries);
@@ -745,10 +751,6 @@ BOOL WINAPI fpEnumMonitors(LPWSTR pName, DWORD Level, LPBYTE pMonitors, DWORD cb
         SetLastError(ERROR_INSUFFICIENT_BUFFER);
         goto em_cleanup;
     }
-    else if (!pMonitors || !pcReturned) {
-        SetLastError(RPC_X_NULL_REF_POINTER);
-        goto em_cleanup;
-    }
 
     /* fill the Buffer with the Monitor-Keys */
     needed = get_local_monitors(Level, pMonitors, cbBuf, &numentries);
diff --git a/dlls/winspool.drv/info.c b/dlls/winspool.drv/info.c
index b7b290f..8ecddf0 100644
--- a/dlls/winspool.drv/info.c
+++ b/dlls/winspool.drv/info.c
@@ -524,7 +524,6 @@ static BOOL CUPS_LoadPrinters(void)
             TRACE("Printer already exists\n");
             RegDeleteValueW(hkeyPrinter, May_Delete_Value);
             RegCloseKey(hkeyPrinter);
-            add_printer_driver(dests[i].name);
         } else {
             static CHAR data_type[] = "RAW",
                     print_proc[]    = "WinPrint",
@@ -662,7 +661,6 @@ PRINTCAP_ParseEntry(const char *pent, BOOL isfirst) {
         TRACE("Printer already exists\n");
         RegDeleteValueW(hkeyPrinter, May_Delete_Value);
         RegCloseKey(hkeyPrinter);
-        add_printer_driver(devname);
     } else {
         static CHAR data_type[]   = "RAW",
                     print_proc[]  = "WinPrint",
@@ -7246,13 +7244,7 @@ BOOL WINAPI EnumMonitorsW(LPWSTR pName, DWORD Level, LPBYTE pMonitors,
 
     if ((backend == NULL)  && !load_backend()) return FALSE;
 
-    /* Level is not checked in win9x */
-    if (!Level || (Level > 2)) {
-        WARN("level (%d) is ignored in win9x\n", Level);
-        SetLastError(ERROR_INVALID_LEVEL);
-        return FALSE;
-    }
-    if (!pcbNeeded) {
+    if (!pcbNeeded || !pcReturned || (!pMonitors && (cbBuf > 0))) {
         SetLastError(RPC_X_NULL_REF_POINTER);
         return FALSE;
     }




More information about the wine-cvs mailing list