{
MessageBox(hwnd, "Internal Error", APPNAME, MB_OK | MB_ICONERROR);
exit(0);
+ /* this line can't be reached but it placates MSVC's warnings :-) */
+ return 0;
}
/*
return 0;
}
+static HWND passphrase_box;
+
/*
* Dialog-box function for the passphrase box.
*/
switch (msg) {
case WM_INITDIALOG:
+ passphrase_box = hwnd;
/*
* Centre the window.
*/
int dlgret;
dlgret = DialogBoxParam(instance, MAKEINTRESOURCE(210),
NULL, PassphraseProc, (LPARAM) & pps);
+ passphrase_box = NULL;
if (!dlgret) {
if (comment)
sfree(comment);
{
struct RSAKey *key;
char *comment;
+ int commentlen;
key = smalloc(sizeof(struct RSAKey));
- memset(key, 0, sizeof(key));
+ memset(key, 0, sizeof(struct RSAKey));
p += makekey(p, key, NULL, 1);
p += makeprivate(p, key);
- p += ssh1_read_bignum(p, key->iqmp); /* p^-1 mod q */
- p += ssh1_read_bignum(p, key->p); /* p */
- p += ssh1_read_bignum(p, key->q); /* q */
- comment = smalloc(GET_32BIT(p));
+ p += ssh1_read_bignum(p, &key->iqmp); /* p^-1 mod q */
+ p += ssh1_read_bignum(p, &key->p); /* p */
+ p += ssh1_read_bignum(p, &key->q); /* q */
+ commentlen = GET_32BIT(p);
+ comment = smalloc(commentlen+1);
if (comment) {
- memcpy(comment, p + 4, GET_32BIT(p));
+ memcpy(comment, p + 4, commentlen);
+ comment[commentlen] = '\0';
key->comment = comment;
}
PUT_32BIT(ret, 1);
case 101: /* add key */
if (HIWORD(wParam) == BN_CLICKED ||
HIWORD(wParam) == BN_DOUBLECLICKED) {
+ if (passphrase_box) {
+ MessageBeep(MB_ICONERROR);
+ SetForegroundWindow(passphrase_box);
+ break;
+ }
prompt_add_keyfile();
}
return 0;
case WM_SYSCOMMAND:
switch (wParam & ~0xF) { /* low 4 bits reserved to Windows */
case IDM_CLOSE:
+ if (passphrase_box)
+ SendMessage(passphrase_box, WM_CLOSE, 0, 0);
SendMessage(hwnd, WM_CLOSE, 0, 0);
break;
case IDM_VIEWKEYS:
}
break;
case IDM_ADDKEY:
+ if (passphrase_box) {
+ MessageBeep(MB_ICONERROR);
+ SetForegroundWindow(passphrase_box);
+ break;
+ }
prompt_add_keyfile();
break;
case IDM_ABOUT: