UINT32 Asn1Tag;\r
UINT32 ObjClass;\r
UINTN Length;\r
+ UINTN Inf;\r
\r
//\r
// Check input parameters.\r
//\r
Temp = Cert;\r
Length = 0;\r
- ASN1_get_object (&Temp, (long *)&Length, (int *)&Asn1Tag, (int *)&ObjClass, (long)CertSize);\r
+ Inf = ASN1_get_object (&Temp, (long *)&Length, (int *)&Asn1Tag, (int *)&ObjClass, (long)CertSize);\r
\r
- if (Asn1Tag != V_ASN1_SEQUENCE) {\r
+ if (((Inf & 0x80) == 0x00) && (Asn1Tag != V_ASN1_SEQUENCE)) {\r
return FALSE;\r
}\r
\r
//\r
// Verify the parsed TBSCertificate is one correct SEQUENCE data.\r
//\r
- if (Asn1Tag != V_ASN1_SEQUENCE) {\r
+ if (((Inf & 0x80) == 0x00) && (Asn1Tag != V_ASN1_SEQUENCE)) {\r
return FALSE;\r
}\r
\r
IN UINT32 Tag\r
)\r
{\r
- UINT8 *PtrOld;\r
- INT32 ObjTag;\r
- INT32 ObjCls;\r
- long ObjLength;\r
+ UINT8 *PtrOld;\r
+ INT32 ObjTag;\r
+ INT32 ObjCls;\r
+ long ObjLength;\r
+ UINT32 Inf;\r
\r
//\r
// Save Ptr position\r
//\r
PtrOld = *Ptr;\r
\r
- ASN1_get_object ((CONST UINT8 **)Ptr, &ObjLength, &ObjTag, &ObjCls, (INT32)(End - (*Ptr)));\r
- if ((ObjTag == (INT32)(Tag & CRYPTO_ASN1_TAG_VALUE_MASK)) &&\r
+ Inf = ASN1_get_object ((CONST UINT8 **)Ptr, &ObjLength, &ObjTag, &ObjCls, (INT32)(End - (*Ptr)));\r
+ if (((Inf & 0x80) == 0x00) &&\r
+ (ObjTag == (INT32)(Tag & CRYPTO_ASN1_TAG_VALUE_MASK)) &&\r
(ObjCls == (INT32)(Tag & CRYPTO_ASN1_TAG_CLASS_MASK)))\r
{\r
*Length = (UINTN)ObjLength;\r