@@ -68,18 +68,23 @@ buf_p = buf; outbuf->tag = *buf_p; buf_p++; buflen--; - if (buflen == 0) { - return(-1); - } /* NULL Tag -- no size is required */ if (outbuf->tag == 0x00) { + outbuf->size = 0; + outbuf->asn1rep_len = 1; + outbuf->asn1rep = buf; + return(_asn1_x509_read_asn1_object(buf_p, buflen, args)); } + + if (buflen == 0) { + return(-1); + } small_object_size = *buf_p; buf_p++; buflen--; if (buflen == 0) { @@ -93,10 +98,11 @@ outbuf->size <<= 8; outbuf->size += *buf_p; buf_p++; buflen--; + if (buflen == 0) { break; } } } else { @@ -105,11 +111,14 @@ if (outbuf->size > buflen) { return(-1); } - outbuf->contents = buf_p; + if (buflen != 0) { + outbuf->contents = buf_p; + } + outbuf->asn1rep_len = outbuf->size + (buf_p - buf); outbuf->asn1rep = buf; buf_p += outbuf->size; buflen -= outbuf->size;