os400: os400qc3.c: replace malloc by LIBSSH2_ALLOC or alloca where possible
diff --git a/src/os400qc3.c b/src/os400qc3.c
index 83ae11f..76c38ca 100644
--- a/src/os400qc3.c
+++ b/src/os400qc3.c
@@ -832,9 +832,9 @@
     _libssh2_bn *rp;
     asn1Element *rsapubkey;
     asn1Element *subjpubkeyinfo;
-    unsigned char *av = NULL;
-    unsigned char *rv = NULL;
-    char *keydbuf = NULL;
+    unsigned char *av;
+    unsigned char *rv;
+    char *keydbuf;
     Qc3_Format_ALGD0400_T algd;
     Qc3_Format_KEYD0200_T *keyd;
     Qus_EC_t errcode;
@@ -879,9 +879,9 @@
         return ret;
     }
 
-    av = (unsigned char *) malloc(a->length);
-    rv = (unsigned char *) malloc(mp->length);
-    keydbuf = malloc(sizeof *keyd +
+    av = (unsigned char *) alloca(a->length);
+    rv = (unsigned char *) alloca(mp->length);
+    keydbuf = alloca(sizeof *keyd +
                      subjpubkeyinfo->end - subjpubkeyinfo->header);
 
     if (av && rv && keydbuf) {
@@ -921,12 +921,6 @@
     }
     asn1delete(subjpubkeyinfo);
     _libssh2_bn_free(mp);
-    if (av)
-        free((char *) av);
-    if (rv)
-        free((char *) rv);
-    if (keydbuf)
-        free(keydbuf);
     return ret;
 }
 
@@ -1363,7 +1357,8 @@
 }
 
 static int
-pkcs1topkcs8(const unsigned char **data8, unsigned int *datalen8,
+pkcs1topkcs8(LIBSSH2_SESSION *session,
+             const unsigned char **data8, unsigned int *datalen8,
              const unsigned char *data1, unsigned int datalen1)
 {
     asn1Element *prvk;
@@ -1385,7 +1380,7 @@
     }
     if (!pkcs8)
         return -1;
-    data = (unsigned char *) malloc(pkcs8->end - pkcs8->header);
+    data = (unsigned char *) LIBSSH2_ALLOC(session, pkcs8->end - pkcs8->header);
     if (!data) {
         asn1delete(pkcs8);
         return -1;
@@ -1406,10 +1401,10 @@
     unsigned int datalen8;
     int ret;
 
-    if (pkcs1topkcs8(&data8, &datalen8, data, datalen))
+    if (pkcs1topkcs8(session, &data8, &datalen8, data, datalen))
         return -1;
     ret = rsapkcs8privkey(session, data8, datalen8, passphrase, loadkeydata);
-    free((char *) data8);
+    LIBSSH2_FREE(session, (char *) data8);
     return ret;
 }
 
@@ -1422,10 +1417,10 @@
     unsigned int datalen8;
     int ret;
 
-    if (pkcs1topkcs8(&data8, &datalen8, data, datalen))
+    if (pkcs1topkcs8(session, &data8, &datalen8, data, datalen))
         return -1;
     ret = rsapkcs8pubkey(session, data8, datalen8, passphrase, loadkeydata);
-    free((char *) data8);
+    LIBSSH2_FREE(session, (char *) data8);
     return ret;
 }
 
@@ -1498,7 +1493,7 @@
 
         if (filesize <= 32768) {        /* Limit to a reasonable size. */
             datalen = filesize;
-            data = (unsigned char *) malloc(datalen);
+            data = (unsigned char *) alloca(datalen);
             if (data) {
                 fseek(fp, 0L, SEEK_SET);
                 fread(data, datalen, 1, fp);
@@ -1507,7 +1502,6 @@
                 if (ret)
                     ret = (*proc1)(session, data, datalen, passphrase,
                                    loadkeydata);
-                free((char *) data);
             }
         }
         fclose(fp);