/** @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
OUT UINT8 **SingleX509Cert\r
)\r
{\r
- X509 *X509Cert;\r
+ X509 *X509Cert;\r
+ CONST UINT8 *Temp;\r
\r
//\r
// Check input parameters.\r
//\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
\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
}\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
//\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