From 5f2df4d2f5bcc2de91f10fc752968e63c7118d8c Mon Sep 17 00:00:00 2001 From: simon Date: Sat, 29 Dec 2001 14:18:51 +0000 Subject: [PATCH] Jordan Russell's patch (again): a couple of registry read operations 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 | 29 ++++++++++++++--------------- winstore.c | 6 +++--- 2 files changed, 17 insertions(+), 18 deletions(-) diff --git a/settings.c b/settings.c index 266e37f5..3ebcbb1f 100644 --- a/settings.c +++ b/settings.c @@ -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'; diff --git a/winstore.c b/winstore.c index 651fbad6..d4800796 100644 --- a/winstore.c +++ b/winstore.c @@ -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; -- 2.11.0