From aaaee1be84edaee1de86f8ddce97f88458d74321 Mon Sep 17 00:00:00 2001 From: Gerard Patel Date: Wed, 16 Aug 2000 12:43:00 +0000 Subject: [PATCH] Add an error message if devmode structure in registry is invalid; attempt to provide plausible values. --- dlls/winspool/info.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/dlls/winspool/info.c b/dlls/winspool/info.c index 30d71c0b723..cbaa007aa81 100644 --- a/dlls/winspool/info.c +++ b/dlls/winspool/info.c @@ -1039,12 +1039,17 @@ static BOOL WINSPOOL_GetDevModeFromReg(HKEY hkey, LPCWSTR ValueName, DWORD sz = buflen, type; LONG ret; + if (ptr) memset(ptr, 0, sizeof(DEVMODEA)); ret = RegQueryValueExW(hkey, ValueName, 0, &type, ptr, &sz); - if(ret != ERROR_SUCCESS && ret != ERROR_MORE_DATA) { - WARN("Got ret = %ld\n", ret); - *needed = 0; - return FALSE; + if ((ret != ERROR_SUCCESS && ret != ERROR_MORE_DATA)) sz = 0; + if (sz < sizeof(DEVMODEA)) + { + ERR("corrupted registry for %s\n", debugstr_w(ValueName)); + sz = sizeof(DEVMODEA); } + /* ensures that dmSize is not erratically bogus if registry is invalid */ + if (ptr && ((DEVMODEA*)ptr)->dmSize < sizeof(DEVMODEA)) + ((DEVMODEA*)ptr)->dmSize = sizeof(DEVMODEA); if(unicode) { sz += (CCHDEVICENAME + CCHFORMNAME); if(buflen >= sz) { -- 2.11.4.GIT