From 6a80c8a26020fbd8e2a62876b4c8e679fa0d6d7f Mon Sep 17 00:00:00 2001 From: Ulrich Czekalla Date: Fri, 25 Feb 2000 21:38:17 +0000 Subject: [PATCH] This patch initializes the return buffer used in GetPrinterDriverA to zeros. This prevents buffer overruns caused by accessing garbage data. Some improvements to the NULL check patch. Gautam Jain EnumPrinters is not returning the number of printers found in case the parameter dwLevel is 1. --- dlls/winspool/info.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/dlls/winspool/info.c b/dlls/winspool/info.c index f55e84f03d6..fac76bccf70 100644 --- a/dlls/winspool/info.c +++ b/dlls/winspool/info.c @@ -206,6 +206,12 @@ BOOL WINAPI OpenPrinterA(LPSTR lpPrinterName,HANDLE *phPrinter, LPOPENEDPRINTERA lpOpenedPrinter; HKEY hkeyPrinters, hkeyPrinter; + if (!lpPrinterName) { + WARN("(printerName: NULL, pDefault %p Ret: False\n", pDefault); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + TRACE("(printerName: %s, pDefault %p\n", lpPrinterName, pDefault); /* Check Printer exists */ @@ -1045,6 +1051,8 @@ BOOL WINAPI EnumPrintersA( switch(dwLevel) { case 1: RegCloseKey(hkeyPrinters); + if (lpdwReturned) + *lpdwReturned = number; return TRUE; case 2: @@ -1161,6 +1169,8 @@ BOOL WINAPI GetPrinterDriverA(HANDLE hPrinter, LPSTR pEnvironment, TRACE("(%d,%s,%ld,%p,%ld,%p)\n",hPrinter,pEnvironment, Level,pDriverInfo,cbBuf, pcbNeeded); + ZeroMemory(pDriverInfo, cbBuf); + lpOpenedPrinter = WINSPOOL_GetOpenedPrinterA(hPrinter); if(!lpOpenedPrinter) { SetLastError(ERROR_INVALID_HANDLE); -- 2.11.4.GIT