projects
/
u
/
mdw
/
putty
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Rework keylist_update() to fix both a buffer-size limitation and a
[u/mdw/putty]
/
windows
/
winpgnt.c
diff --git
a/windows/winpgnt.c
b/windows/winpgnt.c
index
e018159
..
e220d6b
100644
(file)
--- a/
windows/winpgnt.c
+++ b/
windows/winpgnt.c
@@
-353,28
+353,27
@@
static void keylist_update(void)
0, (LPARAM) listentry);
}
for (i = 0; NULL != (skey = index234(ssh2keys, i)); i++) {
0, (LPARAM) listentry);
}
for (i = 0; NULL != (skey = index234(ssh2keys, i)); i++) {
- char
listentry[512]
, *p;
- int len;
+ char
*listentry
, *p;
+ int
fp_
len;
/*
* Replace two spaces in the fingerprint with tabs, for
* nice alignment in the box.
*/
p = skey->alg->fingerprint(skey->data);
/*
* Replace two spaces in the fingerprint with tabs, for
* nice alignment in the box.
*/
p = skey->alg->fingerprint(skey->data);
- strncpy(listentry, p, sizeof(listentry));
+ listentry = dupprintf("%s\t%s", p, skey->comment);
+ fp_len = strlen(listentry);
+ sfree(p);
+
p = strchr(listentry, ' ');
p = strchr(listentry, ' ');
- if (p)
+ if (p
&& p < listentry + fp_len
)
*p = '\t';
p = strchr(listentry, ' ');
*p = '\t';
p = strchr(listentry, ' ');
- if (p)
+ if (p
&& p < listentry + fp_len
)
*p = '\t';
*p = '\t';
- len = strlen(listentry);
- if (len < sizeof(listentry) - 2) {
- listentry[len] = '\t';
- strncpy(listentry + len + 1, skey->comment,
- sizeof(listentry) - len - 1);
- }
+
SendDlgItemMessage(keylist, 100, LB_ADDSTRING, 0,
(LPARAM) listentry);
SendDlgItemMessage(keylist, 100, LB_ADDSTRING, 0,
(LPARAM) listentry);
+ sfree(listentry);
}
SendDlgItemMessage(keylist, 100, LB_SETCURSEL, (WPARAM) - 1, 0);
}
}
SendDlgItemMessage(keylist, 100, LB_SETCURSEL, (WPARAM) - 1, 0);
}