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;
 		}