Jordan Russell's patch (again): a couple of registry read operations
authorsimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 29 Dec 2001 14:18:51 +0000 (14:18 +0000)
committersimon <simon@cda61777-01e9-0310-a592-d414129be87e>
Sat, 29 Dec 2001 14:18:51 +0000 (14:18 +0000)
were using RegCreateKey instead of RegOpenKey by mistake. This also
required a fix in settings.c to deal gracefully with a NULL return
from enum_settings_start() - since the use of RCK had caused this
never to happen, the code path had never been tested.

git-svn-id: svn://svn.tartarus.org/sgt/putty@1516 cda61777-01e9-0310-a592-d414129be87e

settings.c
winstore.c

index 266e37f..3ebcbb1 100644 (file)
@@ -565,24 +565,23 @@ void get_sesslist(int allocate)
 
     if (allocate) {
 
-       if ((handle = enum_settings_start()) == NULL)
-           return;
-
        buflen = bufsize = 0;
        buffer = NULL;
-       do {
-           ret = enum_settings_next(handle, otherbuf, sizeof(otherbuf));
-           if (ret) {
-               int len = strlen(otherbuf) + 1;
-               if (bufsize < buflen + len) {
-                   bufsize = buflen + len + 2048;
-                   buffer = srealloc(buffer, bufsize);
+       if ((handle = enum_settings_start())) {
+           do {
+               ret = enum_settings_next(handle, otherbuf, sizeof(otherbuf));
+               if (ret) {
+                   int len = strlen(otherbuf) + 1;
+                   if (bufsize < buflen + len) {
+                       bufsize = buflen + len + 2048;
+                       buffer = srealloc(buffer, bufsize);
+                   }
+                   strcpy(buffer + buflen, otherbuf);
+                   buflen += strlen(buffer + buflen) + 1;
                }
-               strcpy(buffer + buflen, otherbuf);
-               buflen += strlen(buffer + buflen) + 1;
-           }
-       } while (ret);
-       enum_settings_finish(handle);
+           } while (ret);
+           enum_settings_finish(handle);
+       }
        buffer = srealloc(buffer, buflen + 1);
        buffer[buflen] = '\0';
 
index 651fbad..d480079 100644 (file)
@@ -181,7 +181,7 @@ void *enum_settings_start(void)
     struct enumsettings *ret;
     HKEY key;
 
-    if (RegCreateKey(HKEY_CURRENT_USER, puttystr, &key) != ERROR_SUCCESS)
+    if (RegOpenKey(HKEY_CURRENT_USER, puttystr, &key) != ERROR_SUCCESS)
        return NULL;
 
     ret = smalloc(sizeof(*ret));
@@ -246,8 +246,8 @@ int verify_host_key(char *hostname, int port, char *keytype, char *key)
 
     hostkey_regname(regname, hostname, port, keytype);
 
-    if (RegCreateKey(HKEY_CURRENT_USER, PUTTY_REG_POS "\\SshHostKeys",
-                    &rkey) != ERROR_SUCCESS)
+    if (RegOpenKey(HKEY_CURRENT_USER, PUTTY_REG_POS "\\SshHostKeys",
+                  &rkey) != ERROR_SUCCESS)
        return 1;                      /* key does not exist in registry */
 
     readlen = len;