From 8b720f342fd42fd84879f6cef5d1a6423dbbcd98 Mon Sep 17 00:00:00 2001 From: Patrick Monnerat Date: Wed, 9 Dec 2015 13:53:05 +0100 Subject: [PATCH] os400: os400qc3.c: replace malloc by LIBSSH2_ALLOC or alloca where possible --- src/os400qc3.c | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/os400qc3.c b/src/os400qc3.c index 83ae11f0..76c38ca9 100644 --- a/src/os400qc3.c +++ b/src/os400qc3.c @@ -832,9 +832,9 @@ _libssh2_os400qc3_bn_mod_exp(_libssh2_bn *r, _libssh2_bn *a, _libssh2_bn *p, _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 @@ _libssh2_os400qc3_bn_mod_exp(_libssh2_bn *r, _libssh2_bn *a, _libssh2_bn *p, 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 @@ _libssh2_os400qc3_bn_mod_exp(_libssh2_bn *r, _libssh2_bn *a, _libssh2_bn *p, } 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 @@ rsapkcs8pubkey(LIBSSH2_SESSION *session, } 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 @@ pkcs1topkcs8(const unsigned char **data8, unsigned int *datalen8, } 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 @@ rsapkcs1privkey(LIBSSH2_SESSION *session, 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 @@ rsapkcs1pubkey(LIBSSH2_SESSION *session, 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 @@ load_rsa_private_file(LIBSSH2_SESSION *session, const char *filename, 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 @@ load_rsa_private_file(LIBSSH2_SESSION *session, const char *filename, if (ret) ret = (*proc1)(session, data, datalen, passphrase, loadkeydata); - free((char *) data); } } fclose(fp);