Fix zero-rows-cols-crash
[u/mdw/putty] / import.c
index cf91a4d..6c936ff 100644 (file)
--- a/import.c
+++ b/import.c
 #include "ssh.h"
 #include "misc.h"
 
-#define PUT_32BIT(cp, value) do { \
-  (cp)[3] = (unsigned char)(value); \
-  (cp)[2] = (unsigned char)((value) >> 8); \
-  (cp)[1] = (unsigned char)((value) >> 16); \
-  (cp)[0] = (unsigned char)((value) >> 24); } while (0)
-
-#define GET_32BIT(cp) \
-    (((unsigned long)(unsigned char)(cp)[0] << 24) | \
-    ((unsigned long)(unsigned char)(cp)[1] << 16) | \
-    ((unsigned long)(unsigned char)(cp)[2] << 8) | \
-    ((unsigned long)(unsigned char)(cp)[3]))
-
 int openssh_encrypted(const Filename *filename);
 struct ssh2_userkey *openssh_read(const Filename *filename, char *passphrase,
                                  const char **errmsg_p);
@@ -456,7 +444,7 @@ static struct openssh_key *load_openssh_key(const Filename *filename,
             memset(ret->keyblob, 0, ret->keyblob_size);
             sfree(ret->keyblob);
         }
-        memset(&ret, 0, sizeof(ret));
+        memset(ret, 0, sizeof(*ret));
        sfree(ret);
     }
     if (errmsg_p) *errmsg_p = errmsg;
@@ -473,7 +461,7 @@ int openssh_encrypted(const Filename *filename)
     ret = key->encrypted;
     memset(key->keyblob, 0, key->keyblob_size);
     sfree(key->keyblob);
-    memset(&key, 0, sizeof(key));
+    memset(key, 0, sizeof(*key));
     sfree(key);
     return ret;
 }
@@ -666,7 +654,7 @@ struct ssh2_userkey *openssh_read(const Filename *filename, char *passphrase,
     }
     memset(key->keyblob, 0, key->keyblob_size);
     sfree(key->keyblob);
-    memset(&key, 0, sizeof(key));
+    memset(key, 0, sizeof(*key));
     sfree(key);
     if (errmsg_p) *errmsg_p = errmsg;
     return retval;
@@ -778,6 +766,7 @@ int openssh_write(const Filename *filename, struct ssh2_userkey *key,
         footer = "-----END DSA PRIVATE KEY-----\n";
     } else {
         assert(0);                     /* zoinks! */
+       exit(1); /* XXX: GCC doesn't understand assert() on some systems. */
     }
 
     /*
@@ -1110,7 +1099,7 @@ static struct sshcom_key *load_sshcom_key(const Filename *filename,
             memset(ret->keyblob, 0, ret->keyblob_size);
             sfree(ret->keyblob);
         }
-        memset(&ret, 0, sizeof(ret));
+        memset(ret, 0, sizeof(*ret));
        sfree(ret);
     }
     if (errmsg_p) *errmsg_p = errmsg;
@@ -1152,7 +1141,7 @@ int sshcom_encrypted(const Filename *filename, char **comment)
     *comment = dupstr(key->comment);
     memset(key->keyblob, 0, key->keyblob_size);
     sfree(key->keyblob);
-    memset(&key, 0, sizeof(key));
+    memset(key, 0, sizeof(*key));
     sfree(key);
     return answer;
 }
@@ -1427,7 +1416,7 @@ struct ssh2_userkey *sshcom_read(const Filename *filename, char *passphrase,
     }
     memset(key->keyblob, 0, key->keyblob_size);
     sfree(key->keyblob);
-    memset(&key, 0, sizeof(key));
+    memset(key, 0, sizeof(*key));
     sfree(key);
     if (errmsg_p) *errmsg_p = errmsg;
     return ret;
@@ -1509,6 +1498,7 @@ int sshcom_write(const Filename *filename, struct ssh2_userkey *key,
        type = "dl-modp{sign{dsa-nist-sha1},dh{plain}}";
     } else {
         assert(0);                     /* zoinks! */
+       exit(1); /* XXX: GCC doesn't understand assert() on some systems. */
     }
 
     /*