]> git.proxmox.com Git - mirror_edk2.git/blobdiff - CryptoPkg/Library/BaseCryptLib/Pk/CryptX509.c
CryptoPkg: Add some comments for API usage clarification.
[mirror_edk2.git] / CryptoPkg / Library / BaseCryptLib / Pk / CryptX509.c
index 29efc42b021a60782f54dfd53572f0ef977241fc..70b135a754e98e07028de4237c5f510ccc91a9da 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   X.509 Certificate Handler Wrapper Implementation over OpenSSL.\r
 \r
-Copyright (c) 2010 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2010 - 2015, Intel Corporation. All rights reserved.<BR>\r
 This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -38,7 +38,8 @@ X509ConstructCertificate (
   OUT  UINT8        **SingleX509Cert\r
   )\r
 {\r
-  X509     *X509Cert;\r
+  X509         *X509Cert;\r
+  CONST UINT8  *Temp;\r
 \r
   //\r
   // Check input parameters.\r
@@ -50,7 +51,8 @@ X509ConstructCertificate (
   //\r
   // Read DER-encoded X509 Certificate and Construct X509 object.\r
   //\r
-  X509Cert = d2i_X509 (NULL, &Cert, (long) CertSize);\r
+  Temp     = Cert;\r
+  X509Cert = d2i_X509 (NULL, &Temp, (long) CertSize);\r
   if (X509Cert == NULL) {\r
     return FALSE;\r
   }\r
@@ -65,7 +67,7 @@ X509ConstructCertificate (
 \r
   If X509Stack is NULL, then return FALSE.\r
 \r
-  @param[in, out]  X509Stack  On input, pointer to an existing X509 stack object.\r
+  @param[in, out]  X509Stack  On input, pointer to an existing or NULL X509 stack object.\r
                               On output, pointer to the X509 stack object with new\r
                               inserted X509 certificate.\r
   @param           ...        A list of DER-encoded single certificate data followed\r
@@ -123,17 +125,23 @@ X509ConstructCertificateStack (
     }\r
 \r
     CertSize = VA_ARG (Args, UINTN);\r
+    if (CertSize == 0) {\r
+      break;\r
+    }\r
 \r
     //\r
     // Construct X509 Object from the given DER-encoded certificate data.\r
     //\r
+    X509Cert = NULL;\r
     Status = X509ConstructCertificate (\r
                (CONST UINT8 *) Cert,\r
                CertSize,\r
                (UINT8 **) &X509Cert\r
                );\r
     if (!Status) {\r
-      X509_free (X509Cert);\r
+      if (X509Cert != NULL) {\r
+        X509_free (X509Cert);\r
+      }\r
       break;\r
     }\r
 \r
@@ -518,7 +526,8 @@ X509GetTBSCert (
   //\r
   // Check input parameters.\r
   //\r
-  if ((Cert == NULL) || (TBSCert == NULL) || (TBSCertSize == NULL)) {\r
+  if ((Cert == NULL) || (TBSCert == NULL) ||\r
+      (TBSCertSize == NULL) || (CertSize > INT_MAX)) {\r
     return FALSE;\r
   }\r
 \r