]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CryptoPkg/Library/BaseCryptLib/Pk/CryptX509.c
Fix several issues in BaseCryptLib:
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLib / Pk / CryptX509.c
index f90600473a0db474166522f974d86d951a081b77..f0a5d0ac7fbd931b0fc5a8a35f325e2c511894a2 100644 (file)
@@ -346,7 +346,6 @@ X509GetSubjectName (
     return FALSE;\r
   }\r
 \r
-  Status   = FALSE;\r
   X509Cert = NULL;\r
 \r
   //\r
@@ -354,13 +353,20 @@ X509GetSubjectName (
   //\r
   Status = X509ConstructCertificate (Cert, CertSize, (UINT8 **) &X509Cert);\r
   if ((X509Cert == NULL) || (!Status)) {\r
+    Status = FALSE;\r
     goto _Exit;\r
   }\r
 \r
+  Status = FALSE;\r
+\r
   //\r
   // Retrieve subject name from certificate object.\r
   //\r
   X509Name = X509_get_subject_name (X509Cert);\r
+  if (X509Name == NULL) {\r
+    goto _Exit;\r
+  }\r
+\r
   if (*SubjectSize < (UINTN) X509Name->bytes->length) {\r
     *SubjectSize = (UINTN) X509Name->bytes->length;\r
     goto _Exit;\r
@@ -375,7 +381,9 @@ _Exit:
   //\r
   // Release Resources.\r
   //\r
-  X509_free (X509Cert);\r
+  if (X509Cert != NULL) {\r
+    X509_free (X509Cert);\r
+  }\r
 \r
   return Status;\r
 }\r
@@ -415,7 +423,6 @@ RsaGetPublicKeyFromX509 (
     return FALSE;\r
   }\r
 \r
-  Status   = FALSE;\r
   Pkey     = NULL;\r
   X509Cert = NULL;\r
 \r
@@ -424,9 +431,12 @@ RsaGetPublicKeyFromX509 (
   //\r
   Status = X509ConstructCertificate (Cert, CertSize, (UINT8 **) &X509Cert);\r
   if ((X509Cert == NULL) || (!Status)) {\r
+    Status = FALSE;\r
     goto _Exit;\r
   }\r
 \r
+  Status = FALSE;\r
+\r
   //\r
   // Retrieve and check EVP_PKEY data from X509 Certificate.\r
   //\r
@@ -446,8 +456,13 @@ _Exit:
   //\r
   // Release Resources.\r
   //\r
-  X509_free (X509Cert);\r
-  EVP_PKEY_free (Pkey);\r
+  if (X509Cert != NULL) {\r
+    X509_free (X509Cert);\r
+  }\r
+\r
+  if (Pkey != NULL) {\r
+    EVP_PKEY_free (Pkey);\r
+  }  \r
 \r
   return Status;\r
 }\r
@@ -498,15 +513,22 @@ X509VerifyCert (
   //\r
   // Register & Initialize necessary digest algorithms for certificate verification.\r
   //\r
-  EVP_add_digest (EVP_md5());\r
-  EVP_add_digest (EVP_sha1());\r
-  EVP_add_digest (EVP_sha256());\r
+  if (EVP_add_digest (EVP_md5 ()) == 0) {\r
+    goto _Exit;\r
+  }\r
+  if (EVP_add_digest (EVP_sha1 ()) == 0) {\r
+    goto _Exit;\r
+  }\r
+  if (EVP_add_digest (EVP_sha256 ()) == 0) {\r
+    goto _Exit;\r
+  }\r
 \r
   //\r
   // Read DER-encoded certificate to be verified and Construct X509 object.\r
   //\r
   Status = X509ConstructCertificate (Cert, CertSize, (UINT8 **) &X509Cert);\r
   if ((X509Cert == NULL) || (!Status)) {\r
+    Status = FALSE;\r
     goto _Exit;\r
   }\r
 \r
@@ -515,9 +537,12 @@ X509VerifyCert (
   //\r
   Status = X509ConstructCertificate (CACert, CACertSize, (UINT8 **) &X509CACert);\r
   if ((X509CACert == NULL) || (!Status)) {\r
+    Status = FALSE;\r
     goto _Exit;\r
   }\r
 \r
+  Status = FALSE;\r
+\r
   //\r
   // Set up X509 Store for trusted certificate.\r
   //\r
@@ -546,9 +571,17 @@ _Exit:
   //\r
   // Release Resources.\r
   //\r
-  X509_free (X509Cert);\r
-  X509_free (X509CACert);\r
-  X509_STORE_free (CertStore);\r
+  if (X509Cert != NULL) {\r
+    X509_free (X509Cert);\r
+  }\r
+\r
+  if (X509CACert != NULL) {\r
+    X509_free (X509CACert);\r
+  }\r
 \r
+  if (CertStore != NULL) {\r
+    X509_STORE_free (CertStore);\r
+  }\r
+  \r
   return Status;\r
 }\r