1
0
mirror of https://git.tartarus.org/simon/putty.git synced 2025-01-09 17:38:00 +00:00

When the first element in a preference list was unrecognised, PuTTY would

hang when reading it because strtok() kept getting the full list passed in.
Fix this, and add an assert() for an assumption documented in a comment while
I'm in the area.

[originally from svn r6294]
This commit is contained in:
Ben Harris 2005-09-12 15:45:29 +00:00
parent b65e905572
commit 456ba58329

View File

@ -2,6 +2,7 @@
* settings.c: read and write saved sessions. (platform-independent)
*/
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
#include "putty.h"
@ -172,6 +173,7 @@ static void gprefs(void *sesskey, char *name, char *def,
int *array)
{
char commalist[80];
char *tokarg = commalist;
int n;
unsigned long seen = 0; /* bitmap for weeding dups etc */
gpps(sesskey, name, def, commalist, sizeof(commalist));
@ -181,7 +183,8 @@ static void gprefs(void *sesskey, char *name, char *def,
do {
int v;
char *key;
key = strtok(n==0 ? commalist : NULL, ","); /* sorry */
key = strtok(tokarg, ","); /* sorry */
tokarg = NULL;
if (!key) break;
if (((v = key2val(mapping, nvals, key)) != -1) &&
!(seen & 1<<v)) {
@ -194,6 +197,7 @@ static void gprefs(void *sesskey, char *name, char *def,
{
int i;
for (i = 0; i < nvals; i++) {
assert(mapping[i].v < 32);
if (!(seen & 1<<mapping[i].v)) {
array[n] = mapping[i].v;
n++;