diff options
| author | Gary Ching-Pang Lin <glin@suse.com> | 2015-07-28 11:46:38 -0400 |
|---|---|---|
| committer | Peter Jones <pjones@redhat.com> | 2015-07-28 11:46:38 -0400 |
| commit | 5ce38c90cf43ee79cd999716ea83a5a44eeb819e (patch) | |
| tree | 2fb3d9dd667c772fae5f87fa61e1501cf12da0ce /Cryptlib/OpenSSL/crypto/asn1/a_object.c | |
| parent | 69ba24ff72921ecabbb47178de40dc5a79350040 (diff) | |
| download | efi-boot-shim-5ce38c90cf43ee79cd999716ea83a5a44eeb819e.tar.gz efi-boot-shim-5ce38c90cf43ee79cd999716ea83a5a44eeb819e.zip | |
Update openssl to 1.0.2d
Also update Cryptlib to edk2 r17731
Signed-off-by: Gary Ching-Pang Lin <glin@suse.com>
Diffstat (limited to 'Cryptlib/OpenSSL/crypto/asn1/a_object.c')
| -rw-r--r-- | Cryptlib/OpenSSL/crypto/asn1/a_object.c | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/Cryptlib/OpenSSL/crypto/asn1/a_object.c b/Cryptlib/OpenSSL/crypto/asn1/a_object.c index aa1847cf..27f9c169 100644 --- a/Cryptlib/OpenSSL/crypto/asn1/a_object.c +++ b/Cryptlib/OpenSSL/crypto/asn1/a_object.c @@ -262,8 +262,6 @@ ASN1_OBJECT *d2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, return ret; err: ASN1err(ASN1_F_D2I_ASN1_OBJECT, i); - if ((ret != NULL) && ((a == NULL) || (*a != ret))) - ASN1_OBJECT_free(ret); return (NULL); } @@ -272,6 +270,7 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, { ASN1_OBJECT *ret = NULL; const unsigned char *p; + unsigned char *data; int i, length; /* @@ -305,17 +304,24 @@ ASN1_OBJECT *c2i_ASN1_OBJECT(ASN1_OBJECT **a, const unsigned char **pp, ret = (*a); p = *pp; - if ((ret->data == NULL) || (ret->length < length)) { - if (ret->data != NULL) - OPENSSL_free(ret->data); - ret->data = (unsigned char *)OPENSSL_malloc(length); - ret->flags |= ASN1_OBJECT_FLAG_DYNAMIC_DATA; - if (ret->data == NULL) { + /* detach data from object */ + data = (unsigned char *)ret->data; + ret->data = NULL; + /* once detached we can change it */ + if ((data == NULL) || (ret->length < length)) { + ret->length = 0; + if (data != NULL) + OPENSSL_free(data); + data = (unsigned char *)OPENSSL_malloc(length); + if (data == NULL) { i = ERR_R_MALLOC_FAILURE; goto err; } + ret->flags |= ASN1_OBJECT_FLAG_DYNAMIC_DATA; } - memcpy(ret->data, p, length); + memcpy(data, p, length); + /* reattach data to object, after which it remains const */ + ret->data = data; ret->length = length; ret->sn = NULL; ret->ln = NULL; @@ -368,7 +374,7 @@ void ASN1_OBJECT_free(ASN1_OBJECT *a) } if (a->flags & ASN1_OBJECT_FLAG_DYNAMIC_DATA) { if (a->data != NULL) - OPENSSL_free(a->data); + OPENSSL_free((void *)a->data); a->data = NULL; a->length = 0; } |
