From cd51430ba7b3250fd4ccd4e79d400053e333b690 Mon Sep 17 00:00:00 2001 From: Jakub Jelen Date: Thu, 7 Nov 2019 16:34:24 +0100 Subject: [PATCH] asn1: Avoid malloc(0) also from BIT STRING and GENERALIZED TIME structures --- src/libopensc/asn1.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/libopensc/asn1.c b/src/libopensc/asn1.c index 74d6135a..4e95fe78 100644 --- a/src/libopensc/asn1.c +++ b/src/libopensc/asn1.c @@ -1464,10 +1464,12 @@ static int asn1_decode_entry(sc_context_t *ctx,struct sc_asn1_entry *entry, } if (entry->flags & SC_ASN1_ALLOC) { u8 **buf = (u8 **) parm; - *buf = malloc(objlen-1); - if (*buf == NULL) { - r = SC_ERROR_OUT_OF_MEMORY; - break; + if (objlen > 1) { + *buf = malloc(objlen-1); + if (*buf == NULL) { + r = SC_ERROR_OUT_OF_MEMORY; + break; + } } *len = objlen-1; parm = *buf; @@ -1518,10 +1520,12 @@ static int asn1_decode_entry(sc_context_t *ctx,struct sc_asn1_entry *entry, assert(len != NULL); if (entry->flags & SC_ASN1_ALLOC) { u8 **buf = (u8 **) parm; - *buf = malloc(objlen); - if (*buf == NULL) { - r = SC_ERROR_OUT_OF_MEMORY; - break; + if (objlen > 0) { + *buf = malloc(objlen); + if (*buf == NULL) { + r = SC_ERROR_OUT_OF_MEMORY; + break; + } } c = *len = objlen; parm = *buf;