X-Git-Url: https://git.reactos.org/?p=reactos.git;a=blobdiff_plain;f=reactos%2Fwin32ss%2Fprinting%2Fbase%2Fwinspool%2Fprinters.c;h=ffa965f7067b71d3e11935d0cf52eb60e517a83e;hp=c82132c1bf8b3b5585724bcdbac34d54da4e0ee3;hb=cb609f0b17a4b73e7bcaa1881b420a4e1becdf1b;hpb=c860e2b80d195ace6a3ddc2f4203148974a82d1d;ds=sidebyside diff --git a/reactos/win32ss/printing/base/winspool/printers.c b/reactos/win32ss/printing/base/winspool/printers.c index c82132c1bf8..ffa965f7067 100644 --- a/reactos/win32ss/printing/base/winspool/printers.c +++ b/reactos/win32ss/printing/base/winspool/printers.c @@ -2,7 +2,7 @@ * PROJECT: ReactOS Spooler API * LICENSE: GNU LGPL v2.1 or any later version as published by the Free Software Foundation * PURPOSE: Functions related to Printers and printing - * COPYRIGHT: Copyright 2015 Colin Finck + * COPYRIGHT: Copyright 2015-2017 Colin Finck */ #include "precomp.h" @@ -309,6 +309,16 @@ EnumPrintersW(DWORD Flags, PWSTR Name, DWORD Level, PBYTE pPrinterEnum, DWORD cb DWORD i; PBYTE p = pPrinterEnum; + // Dismiss invalid levels already at this point. + if (Level == 3 || Level > 5) + { + dwErrorCode = ERROR_INVALID_LEVEL; + goto Cleanup; + } + + if (cbBuf && pPrinterEnum) + ZeroMemory(pPrinterEnum, cbBuf); + // Do the RPC call RpcTryExcept { @@ -335,6 +345,7 @@ EnumPrintersW(DWORD Flags, PWSTR Name, DWORD Level, PBYTE pPrinterEnum, DWORD cb } } +Cleanup: SetLastError(dwErrorCode); return (dwErrorCode == ERROR_SUCCESS); }