Module: wine
Branch: master
Commit: e7ba00c7ca848c4bb1a7a32ad5df8b77aed330bc
URL:
https://gitlab.winehq.org/wine/wine/-/commit/e7ba00c7ca848c4bb1a7a32ad5df8b…
Author: Alex Henrie <alexhenrie24(a)gmail.com>
Date: Mon Nov 28 22:05:13 2022 -0700
appwiz: Fix memory leak on realloc failure in install_from_registered_dir (cppcheck).
---
dlls/appwiz.cpl/addons.c | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
index c63106de95b..a5fdda3e81f 100644
--- a/dlls/appwiz.cpl/addons.c
+++ b/dlls/appwiz.cpl/addons.c
@@ -255,7 +255,7 @@ static HKEY open_config_key(void)
static enum install_res install_from_registered_dir(void)
{
- char *package_dir;
+ char *package_dir, *new_package_dir;
HKEY hkey;
DWORD res, type, size = MAX_PATH;
enum install_res ret;
@@ -267,8 +267,11 @@ static enum install_res install_from_registered_dir(void)
package_dir = malloc(size);
res = RegGetValueA(hkey, NULL, addon->dir_config_key, RRF_RT_ANY, &type,
(PBYTE)package_dir, &size);
if(res == ERROR_MORE_DATA) {
- package_dir = realloc(package_dir, size);
- res = RegGetValueA(hkey, NULL, addon->dir_config_key, RRF_RT_ANY, &type,
(PBYTE)package_dir, &size);
+ new_package_dir = realloc(package_dir, size);
+ if(new_package_dir) {
+ package_dir = new_package_dir;
+ res = RegGetValueA(hkey, NULL, addon->dir_config_key, RRF_RT_ANY,
&type, (PBYTE)package_dir, &size);
+ }
}
RegCloseKey(hkey);
if(res == ERROR_FILE_NOT_FOUND) {