diff options
author | Dariusz Michaluk <d.michaluk@samsung.com> | 2018-06-15 11:13:52 +0200 |
---|---|---|
committer | Dariusz Michaluk <d.michaluk@samsung.com> | 2018-06-15 11:13:52 +0200 |
commit | c38ae6ad7adfdfe3cb40ff348277ca32a16756b0 (patch) | |
tree | 563c3fd7bcfa7780960e831965d3d95cf20f24ca /lib/decoding.c | |
parent | 6bbf67947844bb4a21fe68481c541c197086336f (diff) | |
download | libtasn1-c38ae6ad7adfdfe3cb40ff348277ca32a16756b0.tar.gz libtasn1-c38ae6ad7adfdfe3cb40ff348277ca32a16756b0.tar.bz2 libtasn1-c38ae6ad7adfdfe3cb40ff348277ca32a16756b0.zip |
Imported Upstream version 4.12upstream/4.12
Diffstat (limited to 'lib/decoding.c')
-rw-r--r-- | lib/decoding.c | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/lib/decoding.c b/lib/decoding.c index c2e6027..2240b09 100644 --- a/lib/decoding.c +++ b/lib/decoding.c @@ -329,10 +329,10 @@ _asn1_get_time_der (unsigned type, const unsigned char *der, int der_len, int *r if (str_len < 8) { warn(); - return ASN1_DER_ERROR; + return ASN1_TIME_ENCODING_ERROR; } - if (flags & ASN1_DECODE_FLAG_STRICT_DER) + if ((flags & ASN1_DECODE_FLAG_STRICT_DER) && !(flags & ASN1_DECODE_FLAG_ALLOW_INCORRECT_TIME)) { p = &der[len_len]; for (i=0;i<(unsigned)(str_len-1);i++) @@ -359,14 +359,14 @@ _asn1_get_time_der (unsigned type, const unsigned char *der, int der_len, int *r } warn(); - return ASN1_DER_ERROR; + return ASN1_TIME_ENCODING_ERROR; } } if (sign_count == 0 && p[str_len-1] != 'Z') { warn(); - return ASN1_DER_ERROR; + return ASN1_TIME_ENCODING_ERROR; } } memcpy (str, der + len_len, str_len); @@ -1305,7 +1305,12 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, { /* indefinite length method */ if (!HAVE_TWO(ider_len) || ((der[counter]) || der[counter + 1])) { - _asn1_append_sequence_set (p, &tcache); + result = _asn1_append_sequence_set (p, &tcache); + if (result != 0) + { + warn(); + goto cleanup; + } p = tcache.tail; move = RIGHT; continue; @@ -1321,7 +1326,12 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, { /* definite length method */ if (len2 > counter) { - _asn1_append_sequence_set (p, &tcache); + result = _asn1_append_sequence_set (p, &tcache); + if (result != 0) + { + warn(); + goto cleanup; + } p = tcache.tail; move = RIGHT; continue; @@ -1375,7 +1385,14 @@ asn1_der_decoding2 (asn1_node *element, const void *ider, int *max_ider_len, || (type_field (p2->type) == ASN1_ETYPE_SIZE)) p2 = p2->right; if (p2->right == NULL) - _asn1_append_sequence_set (p, &tcache); + { + result = _asn1_append_sequence_set (p, &tcache); + if (result != 0) + { + warn(); + goto cleanup; + } + } p = p2; } } |