The c and rc dances don't make this code shorter or easier to follow, so
I suggest we do it the dumb and straightforward way.

There are more of these 'if (rc == 0)' cleanups in other parse functions
with only minimal gains. I can send a diff for this...

Index: cert.c
===================================================================
RCS file: /cvs/src/usr.sbin/rpki-client/cert.c,v
retrieving revision 1.60
diff -u -p -r1.60 cert.c
--- cert.c      2 Apr 2022 12:17:53 -0000       1.60
+++ cert.c      3 Apr 2022 20:30:29 -0000
@@ -1057,7 +1057,7 @@ certificate_policies(struct parse *p, X5
 struct cert *
 cert_parse_pre(const char *fn, const unsigned char *der, size_t len)
 {
-       int              rc = 0, extsz, c;
+       int              extsz;
        int              sia_present = 0;
        size_t           i;
        X509            *x = NULL;
@@ -1089,21 +1089,24 @@ cert_parse_pre(const char *fn, const uns
                assert(ext != NULL);
                obj = X509_EXTENSION_get_object(ext);
                assert(obj != NULL);
-               c = 1;
 
                switch (OBJ_obj2nid(obj)) {
                case NID_sbgp_ipAddrBlock:
-                       c = sbgp_ipaddrblk(&p, ext);
+                       if (!sbgp_ipaddrblk(&p, ext))
+                               goto out;
                        break;
                case NID_sbgp_autonomousSysNum:
-                       c = sbgp_assysnum(&p, ext);
+                       if (!sbgp_assysnum(&p, ext))
+                               goto out;
                        break;
                case NID_sinfo_access:
                        sia_present = 1;
-                       c = sbgp_sia(&p, ext);
+                       if (!sbgp_sia(&p, ext))
+                               goto out;
                        break;
                case NID_certificate_policies:
-                       c = certificate_policies(&p, ext);
+                       if (!certificate_policies(&p, ext))
+                               goto out;
                        break;
                case NID_crl_distribution_points:
                        /* ignored here, handled later */
@@ -1125,8 +1128,6 @@ cert_parse_pre(const char *fn, const uns
                        } */
                        break;
                }
-               if (c == 0)
-                       goto out;
        }
 
        if (!x509_get_aki(x, p.fn, &p.res->aki))
@@ -1182,14 +1183,12 @@ cert_parse_pre(const char *fn, const uns
        }
 
        p.res->x509 = x;
+       return p.res;
 
-       rc = 1;
 out:
-       if (rc == 0) {
-               cert_free(p.res);
-               X509_free(x);
-       }
-       return (rc == 0) ? NULL : p.res;
+       cert_free(p.res);
+       X509_free(x);
+       return NULL;
 }
 
 struct cert *

Reply via email to