[POWRPROF] EnumPwrSchemes: Fix callback string lengths
authorEric Kohl <eric.kohl@reactos.org>
Sun, 21 Apr 2019 22:41:24 +0000 (00:41 +0200)
committerEric Kohl <eric.kohl@reactos.org>
Sun, 21 Apr 2019 22:44:47 +0000 (00:44 +0200)
The callback routine should get the real lengths of the name and description strings in bytes instead of the buffer sizes in characters. This fixes buffer overflows in powercfg.cpl.

dll/win32/powrprof/powrprof.c

index 672c832..d176c2a 100644 (file)
@@ -265,7 +265,7 @@ EnumPwrSchemes(PWRSCHEMESENUMPROC lpfnPwrSchemesEnumProc,
         memcpy(&PwrPolicy.user, &userPwrPolicy, sizeof(USER_POWER_POLICY));
         memcpy(&PwrPolicy.mach, &machinePwrPolicy, sizeof(MACHINE_POWER_POLICY));
 
-        if (!lpfnPwrSchemesEnumProc(_wtoi(szNum), dwNameSize, szName, dwDescSize, szDesc, &PwrPolicy, lParam))
+        if (!lpfnPwrSchemesEnumProc(_wtoi(szNum), (wcslen(szName) + 1) * sizeof(WCHAR), szName, (wcslen(szDesc) + 1) * sizeof(WCHAR), szDesc, &PwrPolicy, lParam))
             goto cleanup;
         else
             bRet = TRUE;