summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/asn1/tasn_dec.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libcrypto/asn1/tasn_dec.c')
-rw-r--r--src/lib/libcrypto/asn1/tasn_dec.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/lib/libcrypto/asn1/tasn_dec.c b/src/lib/libcrypto/asn1/tasn_dec.c
index 76fc023230..2426cb6253 100644
--- a/src/lib/libcrypto/asn1/tasn_dec.c
+++ b/src/lib/libcrypto/asn1/tasn_dec.c
@@ -691,6 +691,7 @@ static int asn1_d2i_ex_primitive(ASN1_VALUE **pval, unsigned char **in, long inl
691 691
692int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it) 692int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char *free_cont, const ASN1_ITEM *it)
693{ 693{
694 ASN1_VALUE **opval = NULL;
694 ASN1_STRING *stmp; 695 ASN1_STRING *stmp;
695 ASN1_TYPE *typ = NULL; 696 ASN1_TYPE *typ = NULL;
696 int ret = 0; 697 int ret = 0;
@@ -705,6 +706,7 @@ int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char
705 *pval = (ASN1_VALUE *)typ; 706 *pval = (ASN1_VALUE *)typ;
706 } else typ = (ASN1_TYPE *)*pval; 707 } else typ = (ASN1_TYPE *)*pval;
707 if(utype != typ->type) ASN1_TYPE_set(typ, utype, NULL); 708 if(utype != typ->type) ASN1_TYPE_set(typ, utype, NULL);
709 opval = pval;
708 pval = (ASN1_VALUE **)&typ->value.ptr; 710 pval = (ASN1_VALUE **)&typ->value.ptr;
709 } 711 }
710 switch(utype) { 712 switch(utype) {
@@ -796,7 +798,12 @@ int asn1_ex_c2i(ASN1_VALUE **pval, unsigned char *cont, int len, int utype, char
796 798
797 ret = 1; 799 ret = 1;
798 err: 800 err:
799 if(!ret) ASN1_TYPE_free(typ); 801 if(!ret)
802 {
803 ASN1_TYPE_free(typ);
804 if (opval)
805 *opval = NULL;
806 }
800 return ret; 807 return ret;
801} 808}
802 809