Fix handling of code which uses NULL pointers + offset
Apple clang optimizes illegal pointers like (der + counter) with
der == NULL which makes several tests fail, so better avoid that.
Signed-off-by: Stefan Weil <sw@weilnetz.de>
diff --git a/lib/coding.c b/lib/coding.c
index 245ea64..1c766d1 100644
--- a/lib/coding.c
+++ b/lib/coding.c
@@ -1084,6 +1084,7 @@
int counter, counter_old, len2, len3, move, max_len, max_len_old;
int err;
unsigned char *der = ider;
+ unsigned char dummy;
if (ErrorDescription)
ErrorDescription[0] = 0;
@@ -1204,7 +1205,7 @@
goto error;
}
len2 = max_len;
- err = _asn1_object_id_der ((char*)p->value, der + counter, &len2);
+ err = _asn1_object_id_der ((char*)p->value, der ? der + counter : &dummy, &len2);
if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
goto error;
@@ -1222,7 +1223,7 @@
goto error;
}
len2 = max_len;
- err = _asn1_time_der (p->value, p->value_len, der + counter, &len2);
+ err = _asn1_time_der (p->value, p->value_len, der ? der + counter : &dummy, &len2);
if (err != ASN1_SUCCESS && err != ASN1_MEM_ERROR)
goto error;
@@ -1290,7 +1291,7 @@
p->tmp_ival = 0;
if ((type_field (p->type) == ASN1_ETYPE_SET) && (max_len >= 0))
{
- err = _asn1_ordering_set (der + len2, counter - len2, p);
+ err = _asn1_ordering_set (der ? der + len2 : &dummy, counter - len2, p);
if (err != ASN1_SUCCESS)
goto error;
}
@@ -1331,7 +1332,7 @@
if ((type_field (p->type) == ASN1_ETYPE_SET_OF)
&& (counter - len2 > 0) && (max_len >= 0))
{
- err = _asn1_ordering_set_of (der + len2, counter - len2, p);
+ err = _asn1_ordering_set_of (der ? der + len2 : &dummy, counter - len2, p);
if (err != ASN1_SUCCESS)
goto error;
}