Avoid "incomprehensible" errors when required definitions are missing.
[oweals/openssl.git] / crypto / asn1 / x_cinf.c
index 99b9fe7b9f3e73ba4e047008ffb2003e4220faae..5ef17a932cbb0c6a491460a3f149bd8262a1a194 100644 (file)
 
 #include <stdio.h>
 #include "cryptlib.h"
-#include "asn1_mac.h"
+#include <openssl/asn1_mac.h>
 
 /*
  * ASN1err(ASN1_F_D2I_X509_CINF,ERR_R_ASN1_LENGTH_MISMATCH);
  * ASN1err(ASN1_F_X509_CINF_NEW,ERR_R_ASN1_LENGTH_MISMATCH);
  */
 
-int i2d_X509_CINF(a,pp)
-X509_CINF *a;
-unsigned char **pp;
+int i2d_X509_CINF(X509_CINF *a, unsigned char **pp)
        {
        int v1=0,v2=0;
        M_ASN1_I2D_vars(a);
@@ -99,10 +97,7 @@ unsigned char **pp;
        M_ASN1_I2D_finish();
        }
 
-X509_CINF *d2i_X509_CINF(a,pp,length)
-X509_CINF **a;
-unsigned char **pp;
-long length;
+X509_CINF *d2i_X509_CINF(X509_CINF **a, unsigned char **pp, long length)
        {
        int ver=0;
        M_ASN1_D2I_vars(a,X509_CINF *,X509_CINF_new);
@@ -147,7 +142,14 @@ long length;
                M_ASN1_D2I_get_IMP_opt(ret->subjectUID,d2i_ASN1_BIT_STRING, 2,
                        V_ASN1_BIT_STRING);
                }
+/* Note: some broken certificates include extensions but don't set
+ * the version number properly. By bypassing this check they can
+ * be parsed.
+ */
+
+#ifdef VERSION_EXT_CHECK
        if (ver >= 2) /* version 3 extensions */
+#endif
                {
                if (ret->extensions != NULL)
                        while (sk_num(ret->extensions))
@@ -159,7 +161,7 @@ long length;
        M_ASN1_D2I_Finish(a,X509_CINF_free,ASN1_F_D2I_X509_CINF);
        }
 
-X509_CINF *X509_CINF_new()
+X509_CINF *X509_CINF_new(void)
        {
        X509_CINF *ret=NULL;
        ASN1_CTX c;
@@ -179,8 +181,7 @@ X509_CINF *X509_CINF_new()
        M_ASN1_New_Error(ASN1_F_X509_CINF_NEW);
        }
 
-void X509_CINF_free(a)
-X509_CINF *a;
+void X509_CINF_free(X509_CINF *a)
        {
        if (a == NULL) return;
        ASN1_INTEGER_free(a->version);