diff --git a/apps/apps.c b/apps/apps.c
index d68594a..46cc5a0 100644
--- a/apps/apps.c
+++ b/apps/apps.c
@@ -2165,9 +2165,7 @@
 
     BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");
 
-    if (psk_key)
-        OPENSSL_free(psk_key);
-
+    OPENSSL_free(psk_key);
     psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));
 
     BIO_pop(bconn);
@@ -2197,9 +2195,7 @@
 
     BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");
 
-    if (psk_key)
-        OPENSSL_free(psk_key);
-
+    OPENSSL_free(psk_key);
     psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));
 
     BIO_pop(bconn);
diff --git a/apps/asn1pars.c b/apps/asn1pars.c
index 7e1dfb7..01a50f4 100644
--- a/apps/asn1pars.c
+++ b/apps/asn1pars.c
@@ -321,11 +321,9 @@
         ERR_print_errors(bio_err);
     if (buf != NULL)
         BUF_MEM_free(buf);
-    if (name != NULL)
-        OPENSSL_free(name);
-    if (header != NULL)
-        OPENSSL_free(header);
-    if (strictpem && str != NULL)
+    OPENSSL_free(name);
+    OPENSSL_free(header);
+    if (strictpem)
         OPENSSL_free(str);
     ASN1_TYPE_free(at);
     if (osk != NULL)
diff --git a/apps/ca.c b/apps/ca.c
index b703b42..ad6b000 100644
--- a/apps/ca.c
+++ b/apps/ca.c
@@ -2271,8 +2271,7 @@
     ok = 1;
  end:
     for (i = 0; i < DB_NUMBER; i++) {
-        if (row[i] != NULL)
-            OPENSSL_free(row[i]);
+        OPENSSL_free(row[i]);
     }
     return (ok);
 }
@@ -2339,8 +2338,7 @@
     }
  end:
     for (i = 0; i < DB_NUMBER; i++) {
-        if (row[i] != NULL)
-            OPENSSL_free(row[i]);
+        OPENSSL_free(row[i]);
     }
     return (ok);
 }
@@ -2564,8 +2562,7 @@
 
  end:
 
-    if (tmp)
-        OPENSSL_free(tmp);
+    OPENSSL_free(tmp);
     ASN1_OBJECT_free(hold);
     ASN1_GENERALIZEDTIME_free(comp_time);
     ASN1_ENUMERATED_free(rtmp);
@@ -2719,8 +2716,7 @@
 
  end:
 
-    if (tmp)
-        OPENSSL_free(tmp);
+    OPENSSL_free(tmp);
     ASN1_GENERALIZEDTIME_free(comp_time);
 
     return ret;
diff --git a/apps/cms.c b/apps/cms.c
index 907b108..25e3ad6 100644
--- a/apps/cms.c
+++ b/apps/cms.c
@@ -1121,12 +1121,9 @@
         sk_OPENSSL_STRING_free(sksigners);
     if (skkeys)
         sk_OPENSSL_STRING_free(skkeys);
-    if (secret_key)
-        OPENSSL_free(secret_key);
-    if (secret_keyid)
-        OPENSSL_free(secret_keyid);
-    if (pwri_tmp)
-        OPENSSL_free(pwri_tmp);
+    OPENSSL_free(secret_key);
+    OPENSSL_free(secret_keyid);
+    OPENSSL_free(pwri_tmp);
     ASN1_OBJECT_free(econtent_type);
     if (rr)
         CMS_ReceiptRequest_free(rr);
@@ -1152,8 +1149,7 @@
     BIO_free(in);
     BIO_free(indata);
     BIO_free_all(out);
-    if (passin)
-        OPENSSL_free(passin);
+    OPENSSL_free(passin);
     return (ret);
 }
 
diff --git a/apps/dgst.c b/apps/dgst.c
index 69211d3..a679cb9 100644
--- a/apps/dgst.c
+++ b/apps/dgst.c
@@ -451,8 +451,7 @@
         sk_OPENSSL_STRING_free(sigopts);
     if (macopts)
         sk_OPENSSL_STRING_free(macopts);
-    if (sigbuf)
-        OPENSSL_free(sigbuf);
+    OPENSSL_free(sigbuf);
     BIO_free(bmd);
     return (ret);
 }
diff --git a/apps/dsa.c b/apps/dsa.c
index c23ed5d..d864c75 100644
--- a/apps/dsa.c
+++ b/apps/dsa.c
@@ -275,10 +275,8 @@
  end:
     BIO_free_all(out);
     DSA_free(dsa);
-    if (passin)
-        OPENSSL_free(passin);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
     return (ret);
 }
 #else                           /* !OPENSSL_NO_DSA */
diff --git a/apps/ec.c b/apps/ec.c
index 471de47..c56150c 100644
--- a/apps/ec.c
+++ b/apps/ec.c
@@ -271,10 +271,8 @@
     BIO_free(in);
     BIO_free_all(out);
     EC_KEY_free(eckey);
-    if (passin)
-        OPENSSL_free(passin);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
     return (ret);
 }
 #else                           /* !OPENSSL_NO_EC */
diff --git a/apps/ecparam.c b/apps/ecparam.c
index 082df26..dd0e8f5 100644
--- a/apps/ecparam.c
+++ b/apps/ecparam.c
@@ -489,8 +489,7 @@
     BN_free(ec_gen);
     BN_free(ec_order);
     BN_free(ec_cofactor);
-    if (buffer)
-        OPENSSL_free(buffer);
+    OPENSSL_free(buffer);
     BIO_free(in);
     BIO_free_all(out);
     EC_GROUP_free(group);
diff --git a/apps/enc.c b/apps/enc.c
index 83067b8..8b892cf 100644
--- a/apps/enc.c
+++ b/apps/enc.c
@@ -564,10 +564,8 @@
     }
  end:
     ERR_print_errors(bio_err);
-    if (strbuf != NULL)
-        OPENSSL_free(strbuf);
-    if (buff != NULL)
-        OPENSSL_free(buff);
+    OPENSSL_free(strbuf);
+    OPENSSL_free(buff);
     BIO_free(in);
     BIO_free_all(out);
     BIO_free(benc);
@@ -575,8 +573,7 @@
 #ifdef ZLIB
     BIO_free(bzl);
 #endif
-    if (pass)
-        OPENSSL_free(pass);
+    OPENSSL_free(pass);
     return (ret);
 }
 
diff --git a/apps/engine.c b/apps/engine.c
index 448802b..c7c0aaf 100644
--- a/apps/engine.c
+++ b/apps/engine.c
@@ -252,10 +252,8 @@
         }
         OPENSSL_free(name);
         name = NULL;
-        if (desc) {
-            OPENSSL_free(desc);
-            desc = NULL;
-        }
+        OPENSSL_free(desc);
+        desc = NULL;
         /* Move to the next command */
         num = ENGINE_ctrl(e, ENGINE_CTRL_GET_NEXT_CMD_TYPE, num, NULL, NULL);
     } while (num > 0);
@@ -265,10 +263,8 @@
  err:
     if (cmds)
         sk_OPENSSL_STRING_pop_free(cmds, identity);
-    if (name)
-        OPENSSL_free(name);
-    if (desc)
-        OPENSSL_free(desc);
+    OPENSSL_free(name);
+    OPENSSL_free(desc);
     return ret;
 }
 
diff --git a/apps/gendsa.c b/apps/gendsa.c
index 21988a0..75bd802 100644
--- a/apps/gendsa.c
+++ b/apps/gendsa.c
@@ -182,8 +182,7 @@
     BIO_free(in);
     BIO_free_all(out);
     DSA_free(dsa);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passout);
     return (ret);
 }
 #else                           /* !OPENSSL_NO_DSA */
diff --git a/apps/genpkey.c b/apps/genpkey.c
index ae68e7a..de14bd3 100644
--- a/apps/genpkey.c
+++ b/apps/genpkey.c
@@ -235,8 +235,7 @@
     EVP_PKEY_CTX_free(ctx);
     BIO_free_all(out);
     BIO_free(in);
-    if (pass)
-        OPENSSL_free(pass);
+    OPENSSL_free(pass);
 
     return ret;
 }
diff --git a/apps/genrsa.c b/apps/genrsa.c
index a3c00d8..a5ab658 100644
--- a/apps/genrsa.c
+++ b/apps/genrsa.c
@@ -218,8 +218,7 @@
     BN_GENCB_free(cb);
     RSA_free(rsa);
     BIO_free_all(out);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passout);
     if (ret != 0)
         ERR_print_errors(bio_err);
     return (ret);
diff --git a/apps/ocsp.c b/apps/ocsp.c
index 20dc1ae..d4ea019 100644
--- a/apps/ocsp.c
+++ b/apps/ocsp.c
@@ -271,12 +271,9 @@
             req_timeout = atoi(opt_arg());
             break;
         case OPT_URL:
-            if (thost)
-                OPENSSL_free(thost);
-            if (tport)
-                OPENSSL_free(tport);
-            if (tpath)
-                OPENSSL_free(tpath);
+            OPENSSL_free(thost);
+            OPENSSL_free(tport);
+            OPENSSL_free(tpath);
             if (!OCSP_parse_url(opt_arg(), &host, &port, &path, &use_ssl)) {
                 BIO_printf(bio_err, "%s Error parsing URL\n", prog);
                 goto end;
@@ -753,13 +750,9 @@
     sk_X509_pop_free(sign_other, X509_free);
     sk_X509_pop_free(verify_other, X509_free);
     sk_CONF_VALUE_pop_free(headers, X509V3_conf_free);
-
-    if (thost)
-        OPENSSL_free(thost);
-    if (tport)
-        OPENSSL_free(tport);
-    if (tpath)
-        OPENSSL_free(tpath);
+    OPENSSL_free(thost);
+    OPENSSL_free(tport);
+    OPENSSL_free(tpath);
 
     return (ret);
 }
diff --git a/apps/openssl.c b/apps/openssl.c
index f6013f7..c6b048a 100644
--- a/apps/openssl.c
+++ b/apps/openssl.c
@@ -509,18 +509,15 @@
     }
     ret = 1;
  end:
-    if (copied_argv)
-        OPENSSL_free(copied_argv);
-    if (to_free)
-        OPENSSL_free(to_free);
+    OPENSSL_free(copied_argv);
+    OPENSSL_free(to_free);
     if (config != NULL) {
         NCONF_free(config);
         config = NULL;
     }
     if (prog != NULL)
         lh_FUNCTION_free(prog);
-    if (arg.argv != NULL)
-        OPENSSL_free(arg.argv);
+    OPENSSL_free(arg.argv);
 
     BIO_free(bio_in);
     BIO_free_all(bio_out);
diff --git a/apps/passwd.c b/apps/passwd.c
index c529792..8dd8542 100644
--- a/apps/passwd.c
+++ b/apps/passwd.c
@@ -284,10 +284,8 @@
 
  end:
     ERR_print_errors(bio_err);
-    if (salt_malloc)
-        OPENSSL_free(salt_malloc);
-    if (passwd_malloc)
-        OPENSSL_free(passwd_malloc);
+    OPENSSL_free(salt_malloc);
+    OPENSSL_free(passwd_malloc);
     BIO_free(in);
     return (ret);
 }
diff --git a/apps/pkcs12.c b/apps/pkcs12.c
index b4b3730..4c62392 100644
--- a/apps/pkcs12.c
+++ b/apps/pkcs12.c
@@ -556,10 +556,8 @@
     BIO_free_all(out);
     if (canames)
         sk_OPENSSL_STRING_free(canames);
-    if (passin)
-        OPENSSL_free(passin);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
     return (ret);
 }
 
diff --git a/apps/pkcs8.c b/apps/pkcs8.c
index 105c1cb..07ebf3b 100644
--- a/apps/pkcs8.c
+++ b/apps/pkcs8.c
@@ -343,10 +343,8 @@
     EVP_PKEY_free(pkey);
     BIO_free_all(out);
     BIO_free(in);
-    if (passin)
-        OPENSSL_free(passin);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
 
     return ret;
 }
diff --git a/apps/pkey.c b/apps/pkey.c
index 716d6d0..f0930a7 100644
--- a/apps/pkey.c
+++ b/apps/pkey.c
@@ -208,10 +208,8 @@
     EVP_PKEY_free(pkey);
     BIO_free_all(out);
     BIO_free(in);
-    if (passin)
-        OPENSSL_free(passin);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
 
     return ret;
 }
diff --git a/apps/pkeyutl.c b/apps/pkeyutl.c
index 3afe0eb..87e4950 100644
--- a/apps/pkeyutl.c
+++ b/apps/pkeyutl.c
@@ -322,12 +322,9 @@
     EVP_PKEY_CTX_free(ctx);
     BIO_free(in);
     BIO_free_all(out);
-    if (buf_in)
-        OPENSSL_free(buf_in);
-    if (buf_out)
-        OPENSSL_free(buf_out);
-    if (sig)
-        OPENSSL_free(sig);
+    OPENSSL_free(buf_in);
+    OPENSSL_free(buf_out);
+    OPENSSL_free(sig);
     return ret;
 }
 
@@ -413,10 +410,7 @@
     }
 
  end:
-
-    if (passin)
-        OPENSSL_free(passin);
-
+    OPENSSL_free(passin);
     return ctx;
 
 }
diff --git a/apps/req.c b/apps/req.c
index 0502a64..4ff3b24 100644
--- a/apps/req.c
+++ b/apps/req.c
@@ -886,15 +886,12 @@
     if (gen_eng)
         ENGINE_free(gen_eng);
 #endif
-    if (keyalgstr)
-        OPENSSL_free(keyalgstr);
+    OPENSSL_free(keyalgstr);
     X509_REQ_free(req);
     X509_free(x509ss);
     ASN1_INTEGER_free(serial);
-    if (passargin && passin)
-        OPENSSL_free(passin);
-    if (passargout && passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
     OBJ_cleanup();
     return (ret);
 }
diff --git a/apps/rsa.c b/apps/rsa.c
index 0a8e198..858699b 100644
--- a/apps/rsa.c
+++ b/apps/rsa.c
@@ -388,10 +388,8 @@
  end:
     BIO_free_all(out);
     RSA_free(rsa);
-    if (passin)
-        OPENSSL_free(passin);
-    if (passout)
-        OPENSSL_free(passout);
+    OPENSSL_free(passin);
+    OPENSSL_free(passout);
     return (ret);
 }
 #else                           /* !OPENSSL_NO_RSA */
diff --git a/apps/rsautl.c b/apps/rsautl.c
index f138293..0ef6105 100644
--- a/apps/rsautl.c
+++ b/apps/rsautl.c
@@ -315,12 +315,9 @@
     RSA_free(rsa);
     BIO_free(in);
     BIO_free_all(out);
-    if (rsa_in)
-        OPENSSL_free(rsa_in);
-    if (rsa_out)
-        OPENSSL_free(rsa_out);
-    if (passin)
-        OPENSSL_free(passin);
+    OPENSSL_free(rsa_in);
+    OPENSSL_free(rsa_out);
+    OPENSSL_free(passin);
     return ret;
 }
 
diff --git a/apps/s_client.c b/apps/s_client.c
index 8d8340d..a24d2f3 100644
--- a/apps/s_client.c
+++ b/apps/s_client.c
@@ -1985,24 +1985,18 @@
         SSL_free(con);
     }
 #if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
-    if (next_proto.data)
-        OPENSSL_free(next_proto.data);
+    OPENSSL_free(next_proto.data);
 #endif
     SSL_CTX_free(ctx);
     X509_free(cert);
     sk_X509_CRL_pop_free(crls, X509_CRL_free);
     EVP_PKEY_free(key);
     sk_X509_pop_free(chain, X509_free);
-    if (pass)
-        OPENSSL_free(pass);
+    OPENSSL_free(pass);
     X509_VERIFY_PARAM_free(vpm);
     ssl_excert_free(exc);
     sk_OPENSSL_STRING_free(ssl_args);
     SSL_CONF_CTX_free(cctx);
-#ifndef OPENSSL_NO_JPAKE
-    if (jpake_secret && psk_key)
-        OPENSSL_free(psk_key);
-#endif
     OPENSSL_clear_free(cbuf, BUFSIZZ);
     OPENSSL_clear_free(sbuf, BUFSIZZ);
     OPENSSL_clear_free(mbuf, BUFSIZZ);
diff --git a/apps/s_server.c b/apps/s_server.c
index a616b64..5fb275d 100644
--- a/apps/s_server.c
+++ b/apps/s_server.c
@@ -1956,10 +1956,6 @@
     ssl_excert_free(exc);
     sk_OPENSSL_STRING_free(ssl_args);
     SSL_CONF_CTX_free(cctx);
-#ifndef OPENSSL_NO_JPAKE
-    if (jpake_secret && psk_key)
-        OPENSSL_free(psk_key);
-#endif
     BIO_free(bio_s_out);
     bio_s_out = NULL;
     BIO_free(bio_s_msg);
@@ -2931,8 +2927,7 @@
  err:
     if (ret >= 0)
         BIO_printf(bio_s_out, "ACCEPT\n");
-    if (buf != NULL)
-        OPENSSL_free(buf);
+    OPENSSL_free(buf);
     BIO_free_all(io);
     return (ret);
 }
@@ -3065,8 +3060,7 @@
 
  err:
 
-    if (buf != NULL)
-        OPENSSL_free(buf);
+    OPENSSL_free(buf);
     BIO_free_all(io);
     return (ret);
 }
diff --git a/apps/s_socket.c b/apps/s_socket.c
index caa5b61..29240e8 100644
--- a/apps/s_socket.c
+++ b/apps/s_socket.c
@@ -354,8 +354,7 @@
         } else
             sock = accept_socket;
         i = (*cb) (name, sock, type, context);
-        if (name != NULL)
-            OPENSSL_free(name);
+        OPENSSL_free(name);
         if (type == SOCK_STREAM)
             SHUTDOWN2(sock);
         if (naccept != -1)
diff --git a/apps/smime.c b/apps/smime.c
index 0fda865..8b8520b 100644
--- a/apps/smime.c
+++ b/apps/smime.c
@@ -664,8 +664,7 @@
     BIO_free(in);
     BIO_free(indata);
     BIO_free_all(out);
-    if (passin)
-        OPENSSL_free(passin);
+    OPENSSL_free(passin);
     return (ret);
 }
 
diff --git a/apps/speed.c b/apps/speed.c
index 08ab9c5..a5bd265 100644
--- a/apps/speed.c
+++ b/apps/speed.c
@@ -2529,8 +2529,6 @@
         fprintf(stdout, "\n");
     }
 
-    if (inp)
-        OPENSSL_free(inp);
-    if (out)
-        OPENSSL_free(out);
+    OPENSSL_free(inp);
+    OPENSSL_free(out);
 }
diff --git a/apps/spkac.c b/apps/spkac.c
index 7ceff9f..abae0e1 100644
--- a/apps/spkac.c
+++ b/apps/spkac.c
@@ -240,7 +240,6 @@
     BIO_free(in);
     BIO_free_all(out);
     EVP_PKEY_free(pkey);
-    if (passin)
-        OPENSSL_free(passin);
+    OPENSSL_free(passin);
     return (ret);
 }
diff --git a/apps/srp.c b/apps/srp.c
index b984c14..960ca82 100644
--- a/apps/srp.c
+++ b/apps/srp.c
@@ -384,10 +384,8 @@
                            errorline, configfile);
             goto end;
         }
-        if (tofree) {
-            OPENSSL_free(tofree);
-            tofree = NULL;
-        }
+        OPENSSL_free(tofree);
+        tofree = NULL;
 
         /* Lets get the config section we are using */
         if (section == NULL) {
@@ -519,26 +517,16 @@
                 row[DB_srpgN] = BUF_strdup(gNid);
 
                 if (!row[DB_srpid] || !row[DB_srpgN] || !row[DB_srptype]
-                    || !row[DB_srpverifier] || !row[DB_srpsalt] || (userinfo
-                                                                    &&
-                                                                    (!(row
-                                                                       [DB_srpinfo]
-                                                                       =
-                                                                       BUF_strdup
-                                                                       (userinfo))))
+                    || !row[DB_srpverifier] || !row[DB_srpsalt]
+                    || (userinfo &&
+                         (!(row [DB_srpinfo] = BUF_strdup (userinfo))))
                     || !update_index(db, row)) {
-                    if (row[DB_srpid])
-                        OPENSSL_free(row[DB_srpid]);
-                    if (row[DB_srpgN])
-                        OPENSSL_free(row[DB_srpgN]);
-                    if (row[DB_srpinfo])
-                        OPENSSL_free(row[DB_srpinfo]);
-                    if (row[DB_srptype])
-                        OPENSSL_free(row[DB_srptype]);
-                    if (row[DB_srpverifier])
-                        OPENSSL_free(row[DB_srpverifier]);
-                    if (row[DB_srpsalt])
-                        OPENSSL_free(row[DB_srpsalt]);
+                    OPENSSL_free(row[DB_srpid]);
+                    OPENSSL_free(row[DB_srpgN]);
+                    OPENSSL_free(row[DB_srpinfo]);
+                    OPENSSL_free(row[DB_srptype]);
+                    OPENSSL_free(row[DB_srpverifier]);
+                    OPENSSL_free(row[DB_srpsalt]);
                     goto end;
                 }
                 doupdatedb = 1;
@@ -676,8 +664,7 @@
 
     if (verbose)
         BIO_printf(bio_err, "SRP terminating with code %d.\n", ret);
-    if (tofree)
-        OPENSSL_free(tofree);
+    OPENSSL_free(tofree);
     if (ret)
         ERR_print_errors(bio_err);
     if (randfile)
diff --git a/apps/x509.c b/apps/x509.c
index 5418cce..31ae38a 100644
--- a/apps/x509.c
+++ b/apps/x509.c
@@ -955,8 +955,7 @@
     ASN1_INTEGER_free(sno);
     sk_ASN1_OBJECT_pop_free(trust, ASN1_OBJECT_free);
     sk_ASN1_OBJECT_pop_free(reject, ASN1_OBJECT_free);
-    if (passin)
-        OPENSSL_free(passin);
+    OPENSSL_free(passin);
     return (ret);
 }
 
@@ -996,8 +995,7 @@
         goto end;
 
  end:
-    if (buf)
-        OPENSSL_free(buf);
+    OPENSSL_free(buf);
     BN_free(serial);
     return bs;
 }
