summaryrefslogtreecommitdiff
path: root/lib/libcrypto/asn1/tasn_fre.c
diff options
context:
space:
mode:
authorAlexander Bluhm <bluhm@cvs.openbsd.org>2018-04-06 12:16:07 +0000
committerAlexander Bluhm <bluhm@cvs.openbsd.org>2018-04-06 12:16:07 +0000
commitc98c849206396b1edfa3a230c58d93e4d161e6b9 (patch)
treedefd4f37606f299dc7c26f0e06a8bba3528f91d2 /lib/libcrypto/asn1/tasn_fre.c
parente5799b1123ccc604d6353c622b08d0a4740e9633 (diff)
Revert revision 1.12 commit. Although *pval looks like a C pointer,
it may be something else. For primitive types it is possible that a boolean int has been casted to an ASN1_VALUE pointer. Then the 64 bit read access to *pval may crash due to alignent or 32 bit size. bug report Anton Borowka; OK tedu@ jsing@ miod@
Diffstat (limited to 'lib/libcrypto/asn1/tasn_fre.c')
-rw-r--r--lib/libcrypto/asn1/tasn_fre.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/lib/libcrypto/asn1/tasn_fre.c b/lib/libcrypto/asn1/tasn_fre.c
index 9276034808f..c05310ec285 100644
--- a/lib/libcrypto/asn1/tasn_fre.c
+++ b/lib/libcrypto/asn1/tasn_fre.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tasn_fre.c,v 1.15 2016/12/30 16:04:34 jsing Exp $ */
+/* $OpenBSD: tasn_fre.c,v 1.16 2018/04/06 12:16:06 bluhm Exp $ */
/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
* project 2000.
*/
@@ -88,7 +88,10 @@ asn1_item_combine_free(ASN1_VALUE **pval, const ASN1_ITEM *it, int combine)
ASN1_aux_cb *asn1_cb = NULL;
int i;
- if (pval == NULL || *pval == NULL)
+ if (pval == NULL)
+ return;
+ /* For primitive types *pval may be something other than C pointer. */
+ if (it->itype != ASN1_ITYPE_PRIMITIVE && *pval == NULL)
return;
if (aux != NULL && aux->asn1_cb != NULL)