From: simon Date: Sat, 29 Dec 2001 14:18:51 +0000 (+0000) Subject: Jordan Russell's patch (again): a couple of registry read operations X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/commitdiff_plain/5f2df4d2f5bcc2de91f10fc752968e63c7118d8c 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 --- 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;