Remove some unnecessary NULL checks.

Our free functions all tolerate NULL.

Change-Id: Ifcb3185c8d2f34afb83f7286c3463136edc926fa
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/53125
Reviewed-by: Bob Beck <bbe@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
diff --git a/crypto/asn1/a_object.c b/crypto/asn1/a_object.c
index 17783ba..c854fb8 100644
--- a/crypto/asn1/a_object.c
+++ b/crypto/asn1/a_object.c
@@ -204,9 +204,7 @@
   // once detached we can change it
   if ((data == NULL) || (ret->length < length)) {
     ret->length = 0;
-    if (data != NULL) {
-      OPENSSL_free(data);
-    }
+    OPENSSL_free(data);
     data = (unsigned char *)OPENSSL_malloc(length);
     if (data == NULL) {
       i = ERR_R_MALLOC_FAILURE;
diff --git a/crypto/asn1/a_utctm.c b/crypto/asn1/a_utctm.c
index 159a0ea..ac548dd 100644
--- a/crypto/asn1/a_utctm.c
+++ b/crypto/asn1/a_utctm.c
@@ -154,7 +154,7 @@
   s->type = V_ASN1_UTCTIME;
   return s;
 err:
-  if (free_s && s) {
+  if (free_s) {
     ASN1_UTCTIME_free(s);
   }
   return NULL;
diff --git a/crypto/asn1/tasn_utl.c b/crypto/asn1/tasn_utl.c
index a476874..4a97574 100644
--- a/crypto/asn1/tasn_utl.c
+++ b/crypto/asn1/tasn_utl.c
@@ -146,7 +146,7 @@
   ASN1_ENCODING *enc;
   enc = asn1_get_enc_ptr(pval, it);
   if (enc) {
-    if (enc->enc && !enc->alias_only) {
+    if (!enc->alias_only) {
       OPENSSL_free(enc->enc);
     }
     enc->enc = NULL;
diff --git a/crypto/x509/a_sign.c b/crypto/x509/a_sign.c
index 010f660..ed9e79b 100644
--- a/crypto/x509/a_sign.c
+++ b/crypto/x509/a_sign.c
@@ -107,14 +107,8 @@
     OPENSSL_PUT_ERROR(X509, ERR_R_EVP_LIB);
     goto err;
   }
-  if (signature->data != NULL) {
-    OPENSSL_free(signature->data);
-  }
-  signature->data = buf_out;
+  ASN1_STRING_set0(signature, buf_out, outl);
   buf_out = NULL;
-  signature->length = outl;
-  // In the interests of compatibility, I'll make sure that the bit string
-  // has a 'not-used bits' value of 0
   signature->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);
   signature->flags |= ASN1_STRING_FLAG_BITS_LEFT;
 err:
diff --git a/crypto/x509/asn1_gen.c b/crypto/x509/asn1_gen.c
index 3890c46..eb31970 100644
--- a/crypto/x509/asn1_gen.c
+++ b/crypto/x509/asn1_gen.c
@@ -273,13 +273,8 @@
   ret = d2i_ASN1_TYPE(NULL, &cp, len);
 
 err:
-  if (orig_der) {
-    OPENSSL_free(orig_der);
-  }
-  if (new_der) {
-    OPENSSL_free(new_der);
-  }
-
+  OPENSSL_free(orig_der);
+  OPENSSL_free(new_der);
   return ret;
 }
 
@@ -513,18 +508,9 @@
   der = NULL;
 
 bad:
-
-  if (der) {
-    OPENSSL_free(der);
-  }
-
-  if (sk) {
-    sk_ASN1_TYPE_pop_free(sk, ASN1_TYPE_free);
-  }
-  if (sect) {
-    X509V3_section_free(cnf, sect);
-  }
-
+  OPENSSL_free(der);
+  sk_ASN1_TYPE_pop_free(sk, ASN1_TYPE_free);
+  X509V3_section_free(cnf, sect);
   return ret;
 }
 
diff --git a/crypto/x509/by_dir.c b/crypto/x509/by_dir.c
index 395e82d..9e3290d 100644
--- a/crypto/x509/by_dir.c
+++ b/crypto/x509/by_dir.c
@@ -114,10 +114,9 @@
 static int dir_ctrl(X509_LOOKUP *ctx, int cmd, const char *argp, long argl,
                     char **retp) {
   int ret = 0;
-  BY_DIR *ld;
   char *dir = NULL;
 
-  ld = (BY_DIR *)ctx->method_data;
+  BY_DIR *ld = ctx->method_data;
 
   switch (cmd) {
     case X509_L_ADD_DIR:
@@ -151,7 +150,7 @@
     return 0;
   }
   a->dirs = NULL;
-  lu->method_data = (char *)a;
+  lu->method_data = a;
   return 1;
 }
 
@@ -168,26 +167,20 @@
 }
 
 static void by_dir_entry_free(BY_DIR_ENTRY *ent) {
-  if (ent->dir) {
+  if (ent != NULL) {
     OPENSSL_free(ent->dir);
-  }
-  if (ent->hashes) {
     sk_BY_DIR_HASH_pop_free(ent->hashes, by_dir_hash_free);
+    OPENSSL_free(ent);
   }
-  OPENSSL_free(ent);
 }
 
 static void free_dir(X509_LOOKUP *lu) {
-  BY_DIR *a;
-
-  a = (BY_DIR *)lu->method_data;
-  if (a->dirs != NULL) {
+  BY_DIR *a = lu->method_data;
+  if (a != NULL) {
     sk_BY_DIR_ENTRY_pop_free(a->dirs, by_dir_entry_free);
-  }
-  if (a->buffer != NULL) {
     BUF_MEM_free(a->buffer);
+    OPENSSL_free(a);
   }
-  OPENSSL_free(a);
 }
 
 static int add_cert_dir(BY_DIR *ctx, const char *dir, int type) {
@@ -253,7 +246,6 @@
 
 static int get_cert_by_subject(X509_LOOKUP *xl, int type, X509_NAME *name,
                                X509_OBJECT *ret) {
-  BY_DIR *ctx;
   union {
     struct {
       X509 st_x509;
@@ -299,7 +291,7 @@
     goto finish;
   }
 
-  ctx = (BY_DIR *)xl->method_data;
+  BY_DIR *ctx = xl->method_data;
 
   hash_array[0] = X509_NAME_hash(name);
   hash_array[1] = X509_NAME_hash_old(name);
@@ -440,9 +432,7 @@
     }
   }
 finish:
-  if (b != NULL) {
-    BUF_MEM_free(b);
-  }
+  BUF_MEM_free(b);
   return ok;
 }
 
diff --git a/crypto/x509/by_file.c b/crypto/x509/by_file.c
index 65c2b8b..3435fc2 100644
--- a/crypto/x509/by_file.c
+++ b/crypto/x509/by_file.c
@@ -171,12 +171,8 @@
   }
 
 err:
-  if (x != NULL) {
-    X509_free(x);
-  }
-  if (in != NULL) {
-    BIO_free(in);
-  }
+  X509_free(x);
+  BIO_free(in);
   return ret;
 }
 
@@ -236,12 +232,8 @@
   }
 
 err:
-  if (x != NULL) {
-    X509_CRL_free(x);
-  }
-  if (in != NULL) {
-    BIO_free(in);
-  }
+  X509_CRL_free(x);
+  BIO_free(in);
   return ret;
 }
 
diff --git a/crypto/x509/internal.h b/crypto/x509/internal.h
index 6ac8a3f..8785949 100644
--- a/crypto/x509/internal.h
+++ b/crypto/x509/internal.h
@@ -310,7 +310,7 @@
   int init;                    // have we been started
   int skip;                    // don't use us.
   X509_LOOKUP_METHOD *method;  // the functions
-  char *method_data;           // method data
+  void *method_data;           // method data
 
   X509_STORE *store_ctx;  // who owns us
 } /* X509_LOOKUP */;
diff --git a/crypto/x509v3/pcy_tree.c b/crypto/x509v3/pcy_tree.c
index 10dad05..673c615 100644
--- a/crypto/x509v3/pcy_tree.c
+++ b/crypto/x509v3/pcy_tree.c
@@ -688,9 +688,6 @@
 }
 
 void X509_policy_tree_free(X509_POLICY_TREE *tree) {
-  X509_POLICY_LEVEL *curr;
-  int i;
-
   if (!tree) {
     return;
   }
@@ -698,22 +695,14 @@
   sk_X509_POLICY_NODE_free(tree->auth_policies);
   sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free);
 
-  for (i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++) {
-    if (curr->cert) {
-      X509_free(curr->cert);
-    }
-    if (curr->nodes) {
-      sk_X509_POLICY_NODE_pop_free(curr->nodes, policy_node_free);
-    }
-    if (curr->anyPolicy) {
-      policy_node_free(curr->anyPolicy);
-    }
+  for (int i = 0; i < tree->nlevel; i++) {
+    X509_POLICY_LEVEL *curr = &tree->levels[i];
+    X509_free(curr->cert);
+    sk_X509_POLICY_NODE_pop_free(curr->nodes, policy_node_free);
+    policy_node_free(curr->anyPolicy);
   }
 
-  if (tree->extra_data) {
-    sk_X509_POLICY_DATA_pop_free(tree->extra_data, policy_data_free);
-  }
-
+  sk_X509_POLICY_DATA_pop_free(tree->extra_data, policy_data_free);
   OPENSSL_free(tree->levels);
   OPENSSL_free(tree);
 }
diff --git a/crypto/x509v3/v3_conf.c b/crypto/x509v3/v3_conf.c
index 7140edd..64bed7a 100644
--- a/crypto/x509v3/v3_conf.c
+++ b/crypto/x509v3/v3_conf.c
@@ -310,9 +310,7 @@
 err:
   ASN1_OBJECT_free(obj);
   ASN1_OCTET_STRING_free(oct);
-  if (ext_der) {
-    OPENSSL_free(ext_der);
-  }
+  OPENSSL_free(ext_der);
   return extension;
 }
 
diff --git a/crypto/x509v3/v3_crld.c b/crypto/x509v3/v3_crld.c
index f1cab70..68ab343 100644
--- a/crypto/x509v3/v3_crld.c
+++ b/crypto/x509v3/v3_crld.c
@@ -190,12 +190,8 @@
   return 1;
 
 err:
-  if (fnm) {
-    sk_GENERAL_NAME_pop_free(fnm, GENERAL_NAME_free);
-  }
-  if (rnm) {
-    sk_X509_NAME_ENTRY_pop_free(rnm, X509_NAME_ENTRY_free);
-  }
+  sk_GENERAL_NAME_pop_free(fnm, GENERAL_NAME_free);
+  sk_X509_NAME_ENTRY_pop_free(rnm, X509_NAME_ENTRY_free);
   return -1;
 }
 
@@ -308,9 +304,7 @@
   return point;
 
 err:
-  if (point) {
-    DIST_POINT_free(point);
-  }
+  DIST_POINT_free(point);
   return NULL;
 }
 
@@ -389,9 +383,7 @@
       break;
 
     case ASN1_OP_FREE_POST:
-      if (dpn->dpname) {
-        X509_NAME_free(dpn->dpname);
-      }
+      X509_NAME_free(dpn->dpname);
       break;
   }
   return 1;
diff --git a/crypto/x509v3/v3_ncons.c b/crypto/x509v3/v3_ncons.c
index 55f4eed..967423a 100644
--- a/crypto/x509v3/v3_ncons.c
+++ b/crypto/x509v3/v3_ncons.c
@@ -161,13 +161,8 @@
 memerr:
   OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
 err:
-  if (ncons) {
-    NAME_CONSTRAINTS_free(ncons);
-  }
-  if (sub) {
-    GENERAL_SUBTREE_free(sub);
-  }
-
+  NAME_CONSTRAINTS_free(ncons);
+  GENERAL_SUBTREE_free(sub);
   return NULL;
 }
 
diff --git a/crypto/x509v3/v3_utl.c b/crypto/x509v3/v3_utl.c
index 16e0e07..3eccf06 100644
--- a/crypto/x509v3/v3_utl.c
+++ b/crypto/x509v3/v3_utl.c
@@ -158,15 +158,9 @@
   if (!conf) {
     return;
   }
-  if (conf->name) {
-    OPENSSL_free(conf->name);
-  }
-  if (conf->value) {
-    OPENSSL_free(conf->value);
-  }
-  if (conf->section) {
-    OPENSSL_free(conf->section);
-  }
+  OPENSSL_free(conf->name);
+  OPENSSL_free(conf->value);
+  OPENSSL_free(conf->section);
   OPENSSL_free(conf);
 }
 
@@ -551,9 +545,7 @@
   return hexbuf;
 
 err:
-  if (hexbuf) {
-    OPENSSL_free(hexbuf);
-  }
+  OPENSSL_free(hexbuf);
   OPENSSL_PUT_ERROR(X509V3, ERR_R_MALLOC_FAILURE);
   return NULL;