From 4c731485a65bdb973a4cec7a6e919a6415c44ac6 Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Fri, 15 Feb 2008 00:26:40 +0000 Subject: [PATCH] Don't leak Registry key handles. (#516578) 2008-02-15 Tor Lillqvist * gtk/gtkfilesystemwin32.c (get_viewable_logical_drives): Don't leak Registry key handles. (#516578) svn path=/trunk/; revision=19572 --- ChangeLog | 5 +++++ gtk/gtkfilesystemwin32.c | 44 ++++++++++++++++++++++++++-------------- 2 files changed, 34 insertions(+), 15 deletions(-) diff --git a/ChangeLog b/ChangeLog index 6efe9f47fe..efb75fd245 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2008-02-15 Tor Lillqvist + + * gtk/gtkfilesystemwin32.c (get_viewable_logical_drives): Don't + leak Registry key handles. (#516578) + 2008-02-14 Richard Hult * gdk/quartz/gdkwindow-quartz.c: (gdk_window_focus): Using diff --git a/gtk/gtkfilesystemwin32.c b/gtk/gtkfilesystemwin32.c index 55958eafe8..3fc8a088e4 100644 --- a/gtk/gtkfilesystemwin32.c +++ b/gtk/gtkfilesystemwin32.c @@ -346,33 +346,47 @@ static guint32 get_viewable_logical_drives (void) { guint viewable_drives = GetLogicalDrives (); - HKEY my_key; + HKEY key; DWORD var_type = REG_DWORD; //the value's a REG_DWORD type DWORD no_drives_size = 4; DWORD no_drives; gboolean hklm_present = FALSE; - RegOpenKeyEx (HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, KEY_READ, &my_key); - if (RegQueryValueEx (my_key, "NoDrives", NULL, &var_type, &no_drives, &no_drives_size) == ERROR_SUCCESS) + if (RegOpenKeyEx (HKEY_LOCAL_MACHINE, + "Software\\Microsoft\\Windows\\" + "CurrentVersion\\Policies\\Explorer", + 0, KEY_READ, &key) == ERROR_SUCCESS) { - // We need the bits that are set in viewable_drives, and unset in no_drives. - viewable_drives = viewable_drives & ~no_drives; - hklm_present = TRUE; + if (RegQueryValueEx (key, "NoDrives", NULL, &var_type, + (LPBYTE) &no_drives, &no_drives_size) == ERROR_SUCCESS) + { + /* We need the bits that are set in viewable_drives, and + * unset in no_drives. + */ + viewable_drives = viewable_drives & ~no_drives; + hklm_present = TRUE; + } + RegCloseKey (key); } - // If the key is present in HKLM then the one in HKCU should be ignored + /* If the key is present in HKLM then the one in HKCU should be ignored */ if (!hklm_present) { - RegOpenKeyEx (HKEY_CURRENT_USER, "Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\Explorer", 0, KEY_READ, &my_key); - if (RegQueryValueEx (my_key, "NoDrives", NULL, &var_type, &no_drives, &no_drives_size) == ERROR_SUCCESS) - { - // We need the bits that are set in viewable_drives, and unset in no_drives. - viewable_drives = viewable_drives & ~no_drives; - } - } + if (RegOpenKeyEx (HKEY_CURRENT_USER, + "Software\\Microsoft\\Windows\\" + "CurrentVersion\\Policies\\Explorer", + 0, KEY_READ, &key) == ERROR_SUCCESS) + { + if (RegQueryValueEx (key, "NoDrives", NULL, &var_type, + (LPBYTE) &no_drives, &no_drives_size) == ERROR_SUCCESS) + { + viewable_drives = viewable_drives & ~no_drives; + } + RegCloseKey (key); + } + } - RegCloseKey (my_key); return viewable_drives; }