Make sure DrvGetPrinterData returns the correct data if cbData <= 1
diff --git a/misc/printdrv.c b/misc/printdrv.c index 5373129..76ae0f9 100644 --- a/misc/printdrv.c +++ b/misc/printdrv.c
@@ -138,14 +138,14 @@ * Helper for DrvGetPrinterData */ static DWORD DrvGetPrinterDataInternal(LPSTR RegStr_Printer, -LPBYTE lpPrinterData, int cbData) +LPBYTE lpPrinterData, int cbData, int what) { DWORD res = -1; HKEY hkey; DWORD dwType, cbQueryData; if (!(RegOpenKey32A(HKEY_LOCAL_MACHINE, RegStr_Printer, &hkey))) { - if (cbData > 1) { /* "Default DevMode" */ + if (what == INT_PD_DEFAULT_DEVMODE) { /* "Default DevMode" */ if (!(RegQueryValueEx32A(hkey, DefaultDevMode, 0, &dwType, 0, &cbQueryData))) { if (!lpPrinterData) res = cbQueryData; @@ -200,7 +200,8 @@ if (((DWORD)lpProfile == INT_PD_DEFAULT_DEVMODE) || (HIWORD(lpProfile) && (!strcmp(lpProfile, DefaultDevMode)))) { - size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData); + size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData, + INT_PD_DEFAULT_DEVMODE); if (size+1) { *lpNeeded = size; if ((lpPrinterData) && (*lpNeeded > cbData)) @@ -217,7 +218,8 @@ res = ERROR_MORE_DATA; goto failed; } - size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, 1); + size = DrvGetPrinterDataInternal(RegStr_Printer, lpPrinterData, cbData, + INT_PD_DEFAULT_MODEL); if ((size+1) && (lpType)) *lpType = REG_SZ; else