[PATCH 1/2] msi: Fix a registry key leak.
Huw Davies
huw at codeweavers.com
Wed Jul 15 06:32:18 CDT 2015
The code was unnecessarily opening the top-level subkey and then
not closing it.
---
dlls/msi/action.c | 18 ++++++++++--------
1 file changed, 10 insertions(+), 8 deletions(-)
diff --git a/dlls/msi/action.c b/dlls/msi/action.c
index 88bb1bb..22e97a7 100644
--- a/dlls/msi/action.c
+++ b/dlls/msi/action.c
@@ -2973,13 +2973,17 @@ static void delete_key( const MSICOMPONENT *comp, HKEY root, const WCHAR *path )
access |= get_registry_view( comp );
if (!(subkey = strdupW( path ))) return;
- for (;;)
+ do
{
- if ((p = strrchrW( subkey, '\\' ))) *p = 0;
- hkey = open_key( comp, root, subkey, FALSE );
- if (!hkey) break;
- if (p && p[1])
+ if ((p = strrchrW( subkey, '\\' )))
+ {
+ *p = 0;
+ if (!p[1]) continue; /* trailing backslash */
+ hkey = open_key( comp, root, subkey, FALSE );
+ if (!hkey) break;
res = RegDeleteKeyExW( hkey, p + 1, access, 0 );
+ RegCloseKey( hkey );
+ }
else
res = RegDeleteKeyExW( root, subkey, access, 0 );
if (res)
@@ -2987,9 +2991,7 @@ static void delete_key( const MSICOMPONENT *comp, HKEY root, const WCHAR *path )
TRACE("failed to delete key %s (%d)\n", debugstr_w(subkey), res);
break;
}
- if (p && p[1]) RegCloseKey( hkey );
- else break;
- }
+ } while (p);
msi_free( subkey );
}
--
1.8.0
More information about the wine-patches
mailing list