Handle errors more normally in asn1_gen.c.

Functions typically just push their own error codes.

Change-Id: Iac83bfdf56ce436bd3a9b8af5c43ca67fb4b9b15
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/56107
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/x509/asn1_gen.c b/crypto/x509/asn1_gen.c
index 6365017..5550f61 100644
--- a/crypto/x509/asn1_gen.c
+++ b/crypto/x509/asn1_gen.c
@@ -124,8 +124,8 @@
   int exp_count;
 } tag_exp_arg;
 
-static ASN1_TYPE *generate_v3(const char *str, const X509V3_CTX *cnf, int depth,
-                              int *perr);
+static ASN1_TYPE *generate_v3(const char *str, const X509V3_CTX *cnf,
+                              int depth);
 static int bitstr_cb(const char *elem, size_t len, void *bitstr);
 static int asn1_cb(const char *elem, size_t len, void *bitstr);
 static int append_exp(tag_exp_arg *arg, int exp_tag, int exp_class,
@@ -133,21 +133,16 @@
 static int parse_tagging(const char *vstart, size_t vlen, int *ptag,
                          int *pclass);
 static ASN1_TYPE *asn1_multi(int utype, const char *section,
-                             const X509V3_CTX *cnf, int depth, int *perr);
+                             const X509V3_CTX *cnf, int depth);
 static ASN1_TYPE *asn1_str2type(const char *str, int format, int utype);
 static int asn1_str2tag(const char *tagstr, size_t len);
 
 ASN1_TYPE *ASN1_generate_v3(const char *str, const X509V3_CTX *cnf) {
-  int err = 0;
-  ASN1_TYPE *ret = generate_v3(str, cnf, 0, &err);
-  if (err) {
-    OPENSSL_PUT_ERROR(ASN1, err);
-  }
-  return ret;
+  return generate_v3(str, cnf, 0);
 }
 
-static ASN1_TYPE *generate_v3(const char *str, const X509V3_CTX *cnf, int depth,
-                              int *perr) {
+static ASN1_TYPE *generate_v3(const char *str, const X509V3_CTX *cnf,
+                              int depth) {
   ASN1_TYPE *ret;
   tag_exp_arg asn1_tags;
   tag_exp_type *etmp;
@@ -168,20 +163,20 @@
   asn1_tags.format = ASN1_GEN_FORMAT_ASCII;
   asn1_tags.exp_count = 0;
   if (CONF_parse_list(str, ',', 1, asn1_cb, &asn1_tags) != 0) {
-    *perr = ASN1_R_UNKNOWN_TAG;
+    OPENSSL_PUT_ERROR(ASN1, ASN1_R_UNKNOWN_TAG);
     return NULL;
   }
 
   if ((asn1_tags.utype == V_ASN1_SEQUENCE) || (asn1_tags.utype == V_ASN1_SET)) {
     if (!cnf) {
-      *perr = ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG;
+      OPENSSL_PUT_ERROR(ASN1, ASN1_R_SEQUENCE_OR_SET_NEEDS_CONFIG);
       return NULL;
     }
     if (depth >= ASN1_GEN_SEQ_MAX_DEPTH) {
-      *perr = ASN1_R_ILLEGAL_NESTED_TAGGING;
+      OPENSSL_PUT_ERROR(ASN1, ASN1_R_ILLEGAL_NESTED_TAGGING);
       return NULL;
     }
-    ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf, depth, perr);
+    ret = asn1_multi(asn1_tags.utype, asn1_tags.str, cnf, depth);
   } else {
     ret = asn1_str2type(asn1_tags.str, asn1_tags.format, asn1_tags.utype);
   }
@@ -445,7 +440,7 @@
 // Handle multiple types: SET and SEQUENCE
 
 static ASN1_TYPE *asn1_multi(int utype, const char *section,
-                             const X509V3_CTX *cnf, int depth, int *perr) {
+                             const X509V3_CTX *cnf, int depth) {
   ASN1_TYPE *ret = NULL;
   STACK_OF(ASN1_TYPE) *sk = NULL;
   const STACK_OF(CONF_VALUE) *sect = NULL;
@@ -465,8 +460,8 @@
       goto bad;
     }
     for (i = 0; i < sk_CONF_VALUE_num(sect); i++) {
-      ASN1_TYPE *typ = generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf,
-                                   depth + 1, perr);
+      ASN1_TYPE *typ =
+          generate_v3(sk_CONF_VALUE_value(sect, i)->value, cnf, depth + 1);
       if (!typ) {
         goto bad;
       }