Patch from Colin Watson intended to give a clean Unix compile with GCC 4.
[u/mdw/putty] / sshpubk.c
index 923ebe9..79b224c 100644 (file)
--- a/sshpubk.c
+++ b/sshpubk.c
@@ -71,11 +71,6 @@ static int loadrsakey_main(FILE * fp, struct RSAKey *key, int pub_only,
     if (i < 0)
        goto end;                      /* overran */
 
-    if (pub_only) {
-       ret = 1;
-       goto end;
-    }
-
     /* Next, the comment field. */
     j = GET_32BIT(buf + i);
     i += 4;
@@ -88,9 +83,17 @@ static int loadrsakey_main(FILE * fp, struct RSAKey *key, int pub_only,
     }
     i += j;
     if (commentptr)
-       *commentptr = comment;
+       *commentptr = dupstr(comment);
     if (key)
        key->comment = comment;
+    else
+       sfree(comment);
+
+    if (pub_only) {
+       ret = 1;
+       goto end;
+    }
+
     if (!key) {
        ret = ciphertype != 0;
        *error = NULL;
@@ -225,7 +228,7 @@ int rsakey_encrypted(const Filename *filename, char **comment)
  * exponent, modulus).
  */
 int rsakey_pubblob(const Filename *filename, void **blob, int *bloblen,
-                  const char **errorstr)
+                  char **commentptr, const char **errorstr)
 {
     FILE *fp;
     char buf[64];
@@ -250,7 +253,7 @@ int rsakey_pubblob(const Filename *filename, void **blob, int *bloblen,
      */
     if (fgets(buf, sizeof(buf), fp) && !strcmp(buf, rsa_signature)) {
        memset(&key, 0, sizeof(key));
-       if (loadrsakey_main(fp, &key, TRUE, NULL, NULL, &error)) {
+       if (loadrsakey_main(fp, &key, TRUE, commentptr, NULL, &error)) {
            *blob = rsa_public_blob(&key, bloblen);
            freersakey(&key);
            ret = 1;
@@ -865,9 +868,9 @@ struct ssh2_userkey *ssh2_load_userkey(const Filename *filename,
     return ret;
 }
 
-char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm,
-                          int *pub_blob_len, char **commentptr,
-                          const char **errorstr)
+unsigned char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm,
+                                   int *pub_blob_len, char **commentptr,
+                                   const char **errorstr)
 {
     FILE *fp;
     char header[40], *b;
@@ -937,7 +940,7 @@ char *ssh2_userkey_loadpub(const Filename *filename, char **algorithm,
        *pub_blob_len = public_blob_len;
     if (algorithm)
        *algorithm = alg->name;
-    return (char *)public_blob;
+    return public_blob;
 
     /*
      * Error processing.