diff options
-rw-r--r-- | src/lib/libcrypto/asn1/tasn_dec.c | 11 | ||||
-rw-r--r-- | src/lib/libcrypto/asn1/tasn_enc.c | 10 |
2 files changed, 17 insertions, 4 deletions
diff --git a/src/lib/libcrypto/asn1/tasn_dec.c b/src/lib/libcrypto/asn1/tasn_dec.c index ac59cc7e21..8964d467c2 100644 --- a/src/lib/libcrypto/asn1/tasn_dec.c +++ b/src/lib/libcrypto/asn1/tasn_dec.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tasn_dec.c,v 1.85 2023/04/28 17:59:53 job Exp $ */ | 1 | /* $OpenBSD: tasn_dec.c,v 1.86 2023/04/30 16:46:49 job Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -736,7 +736,7 @@ static int | |||
736 | asn1_item_d2i_sequence(ASN1_VALUE **pval, CBS *cbs, const ASN1_ITEM *it, | 736 | asn1_item_d2i_sequence(ASN1_VALUE **pval, CBS *cbs, const ASN1_ITEM *it, |
737 | int tag_number, int tag_class, int optional, int depth) | 737 | int tag_number, int tag_class, int optional, int depth) |
738 | { | 738 | { |
739 | CBS cbs_seq, cbs_seq_content; | 739 | CBS cbs_seq, cbs_seq_content, cbs_object; |
740 | int constructed, indefinite, optional_field; | 740 | int constructed, indefinite, optional_field; |
741 | const ASN1_TEMPLATE *errat = NULL; | 741 | const ASN1_TEMPLATE *errat = NULL; |
742 | const ASN1_TEMPLATE *seqat, *at; | 742 | const ASN1_TEMPLATE *seqat, *at; |
@@ -878,9 +878,14 @@ asn1_item_d2i_sequence(ASN1_VALUE **pval, CBS *cbs, const ASN1_ITEM *it, | |||
878 | ASN1_template_free(pseqval, seqat); | 878 | ASN1_template_free(pseqval, seqat); |
879 | } | 879 | } |
880 | 880 | ||
881 | if (!CBS_skip(cbs, CBS_offset(&cbs_seq))) | 881 | if (!CBS_get_bytes(cbs, &cbs_object, CBS_offset(&cbs_seq))) |
882 | goto err; | 882 | goto err; |
883 | 883 | ||
884 | if (!asn1_enc_save(&aseq, &cbs_object, it)) { | ||
885 | ASN1error(ERR_R_MALLOC_FAILURE); | ||
886 | goto err; | ||
887 | } | ||
888 | |||
884 | if (asn1_cb != NULL && !asn1_cb(ASN1_OP_D2I_POST, &aseq, it, NULL)) { | 889 | if (asn1_cb != NULL && !asn1_cb(ASN1_OP_D2I_POST, &aseq, it, NULL)) { |
885 | ASN1error(ASN1_R_AUX_ERROR); | 890 | ASN1error(ASN1_R_AUX_ERROR); |
886 | goto err; | 891 | goto err; |
diff --git a/src/lib/libcrypto/asn1/tasn_enc.c b/src/lib/libcrypto/asn1/tasn_enc.c index 430e8e1e8e..bbe8a2e949 100644 --- a/src/lib/libcrypto/asn1/tasn_enc.c +++ b/src/lib/libcrypto/asn1/tasn_enc.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: tasn_enc.c,v 1.30 2023/04/28 17:59:53 job Exp $ */ | 1 | /* $OpenBSD: tasn_enc.c,v 1.31 2023/04/30 16:46:49 job Exp $ */ |
2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL | 2 | /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL |
3 | * project 2000. | 3 | * project 2000. |
4 | */ | 4 | */ |
@@ -210,6 +210,14 @@ ASN1_item_ex_i2d(ASN1_VALUE **pval, unsigned char **out, const ASN1_ITEM *it, | |||
210 | /* fall through */ | 210 | /* fall through */ |
211 | 211 | ||
212 | case ASN1_ITYPE_SEQUENCE: | 212 | case ASN1_ITYPE_SEQUENCE: |
213 | i = asn1_enc_restore(&seqcontlen, out, pval, it); | ||
214 | /* An error occurred */ | ||
215 | if (i < 0) | ||
216 | return 0; | ||
217 | /* We have a valid cached encoding... */ | ||
218 | if (i > 0) | ||
219 | return seqcontlen; | ||
220 | /* Otherwise carry on */ | ||
213 | seqcontlen = 0; | 221 | seqcontlen = 0; |
214 | /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */ | 222 | /* If no IMPLICIT tagging set to SEQUENCE, UNIVERSAL */ |
215 | if (tag == -1) { | 223 | if (tag == -1) { |