os400: os400qc3.c: replace malloc by LIBSSH2_ALLOC or alloca where possible

This commit is contained in:
Patrick Monnerat 2015-12-09 13:53:05 +01:00 committed by Daniel Stenberg
parent e2985f0a67
commit 8b720f342f

View File

@ -832,9 +832,9 @@ _libssh2_os400qc3_bn_mod_exp(_libssh2_bn *r, _libssh2_bn *a, _libssh2_bn *p,
_libssh2_bn *rp; _libssh2_bn *rp;
asn1Element *rsapubkey; asn1Element *rsapubkey;
asn1Element *subjpubkeyinfo; asn1Element *subjpubkeyinfo;
unsigned char *av = NULL; unsigned char *av;
unsigned char *rv = NULL; unsigned char *rv;
char *keydbuf = NULL; char *keydbuf;
Qc3_Format_ALGD0400_T algd; Qc3_Format_ALGD0400_T algd;
Qc3_Format_KEYD0200_T *keyd; Qc3_Format_KEYD0200_T *keyd;
Qus_EC_t errcode; Qus_EC_t errcode;
@ -879,9 +879,9 @@ _libssh2_os400qc3_bn_mod_exp(_libssh2_bn *r, _libssh2_bn *a, _libssh2_bn *p,
return ret; return ret;
} }
av = (unsigned char *) malloc(a->length); av = (unsigned char *) alloca(a->length);
rv = (unsigned char *) malloc(mp->length); rv = (unsigned char *) alloca(mp->length);
keydbuf = malloc(sizeof *keyd + keydbuf = alloca(sizeof *keyd +
subjpubkeyinfo->end - subjpubkeyinfo->header); subjpubkeyinfo->end - subjpubkeyinfo->header);
if (av && rv && keydbuf) { if (av && rv && keydbuf) {
@ -921,12 +921,6 @@ _libssh2_os400qc3_bn_mod_exp(_libssh2_bn *r, _libssh2_bn *a, _libssh2_bn *p,
} }
asn1delete(subjpubkeyinfo); asn1delete(subjpubkeyinfo);
_libssh2_bn_free(mp); _libssh2_bn_free(mp);
if (av)
free((char *) av);
if (rv)
free((char *) rv);
if (keydbuf)
free(keydbuf);
return ret; return ret;
} }
@ -1363,7 +1357,8 @@ rsapkcs8pubkey(LIBSSH2_SESSION *session,
} }
static int 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) const unsigned char *data1, unsigned int datalen1)
{ {
asn1Element *prvk; asn1Element *prvk;
@ -1385,7 +1380,7 @@ pkcs1topkcs8(const unsigned char **data8, unsigned int *datalen8,
} }
if (!pkcs8) if (!pkcs8)
return -1; return -1;
data = (unsigned char *) malloc(pkcs8->end - pkcs8->header); data = (unsigned char *) LIBSSH2_ALLOC(session, pkcs8->end - pkcs8->header);
if (!data) { if (!data) {
asn1delete(pkcs8); asn1delete(pkcs8);
return -1; return -1;
@ -1406,10 +1401,10 @@ rsapkcs1privkey(LIBSSH2_SESSION *session,
unsigned int datalen8; unsigned int datalen8;
int ret; int ret;
if (pkcs1topkcs8(&data8, &datalen8, data, datalen)) if (pkcs1topkcs8(session, &data8, &datalen8, data, datalen))
return -1; return -1;
ret = rsapkcs8privkey(session, data8, datalen8, passphrase, loadkeydata); ret = rsapkcs8privkey(session, data8, datalen8, passphrase, loadkeydata);
free((char *) data8); LIBSSH2_FREE(session, (char *) data8);
return ret; return ret;
} }
@ -1422,10 +1417,10 @@ rsapkcs1pubkey(LIBSSH2_SESSION *session,
unsigned int datalen8; unsigned int datalen8;
int ret; int ret;
if (pkcs1topkcs8(&data8, &datalen8, data, datalen)) if (pkcs1topkcs8(session, &data8, &datalen8, data, datalen))
return -1; return -1;
ret = rsapkcs8pubkey(session, data8, datalen8, passphrase, loadkeydata); ret = rsapkcs8pubkey(session, data8, datalen8, passphrase, loadkeydata);
free((char *) data8); LIBSSH2_FREE(session, (char *) data8);
return ret; return ret;
} }
@ -1498,7 +1493,7 @@ load_rsa_private_file(LIBSSH2_SESSION *session, const char *filename,
if (filesize <= 32768) { /* Limit to a reasonable size. */ if (filesize <= 32768) { /* Limit to a reasonable size. */
datalen = filesize; datalen = filesize;
data = (unsigned char *) malloc(datalen); data = (unsigned char *) alloca(datalen);
if (data) { if (data) {
fseek(fp, 0L, SEEK_SET); fseek(fp, 0L, SEEK_SET);
fread(data, datalen, 1, fp); fread(data, datalen, 1, fp);
@ -1507,7 +1502,6 @@ load_rsa_private_file(LIBSSH2_SESSION *session, const char *filename,
if (ret) if (ret)
ret = (*proc1)(session, data, datalen, passphrase, ret = (*proc1)(session, data, datalen, passphrase,
loadkeydata); loadkeydata);
free((char *) data);
} }
} }
fclose(fp); fclose(fp);