def _CheckExpression(Expression): Expr = '' if TAB_VALUE_SPLIT in Expression: Expr = Expression[Expression.find(TAB_VALUE_SPLIT)+1:] else: Expr = Expression return IsValidLogicalExpr(Expr, True)
def IsValidPcdDatum(Type, Value): if not Value: return False, ST.ERR_DECPARSE_PCD_VALUE_EMPTY Valid = True Cause = "" if Type not in ["UINT8", "UINT16", "UINT32", "UINT64", "VOID*", "BOOLEAN"]: return False, ST.ERR_DECPARSE_PCD_TYPE if Type == "VOID*": if not ((Value.startswith('L"') or Value.startswith('"') and \ Value.endswith('"')) or (IsValidCArray(Value)) or (IsValidCFormatGuid(Value)) \ or (IsValidNList(Value)) or (CheckGuidRegFormat(Value)) ): return False, ST.ERR_DECPARSE_PCD_VOID % (Value, Type) RealString = Value[Value.find('"') + 1:-1] if RealString: if not IsValidBareCString(RealString): return False, ST.ERR_DECPARSE_PCD_VOID % (Value, Type) elif Type == 'BOOLEAN': if Value in [ 'TRUE', 'FALSE', 'true', 'false', 'True', 'False', '0x1', '0x01', '1', '0x0', '0x00', '0' ]: return True, "" Valid, Cause = IsValidStringTest(Value, True) if not Valid: Valid, Cause = IsValidFeatureFlagExp(Value, True) if not Valid: return False, Cause else: if Value and (Value[0] == '-' or Value[0] == '+'): return False, ST.ERR_DECPARSE_PCD_INT_NEGTIVE % (Value, Type) try: StrVal = Value if Value and not Value.startswith('0x') \ and not Value.startswith('0X'): Value = Value.lstrip('0') if not Value: return True, "" Value = int(Value, 0) MAX_VAL_TYPE = { "BOOLEAN": 0x01, 'UINT8': 0xFF, 'UINT16': 0xFFFF, 'UINT32': 0xFFFFFFFF, 'UINT64': 0xFFFFFFFFFFFFFFFF } if Value > MAX_VAL_TYPE[Type]: return False, ST.ERR_DECPARSE_PCD_INT_EXCEED % (StrVal, Type) except BaseException: Valid, Cause = IsValidLogicalExpr(Value, True) if not Valid: return False, Cause return True, ""
def IsValidNumValUint8(Token): Valid = True Cause = "" TokenValue = None Token = Token.strip() if Token.lower().startswith('0x'): Base = 16 else: Base = 10 try: TokenValue = long(Token, Base) except BaseException: Valid, Cause = IsValidLogicalExpr(Token, True) if Cause: pass if not Valid: return False if TokenValue and (TokenValue < 0 or TokenValue > 0xFF): return False else: return True
def IsValidPcdDatum(Type, Value): if not Value: return False, ST.ERR_DECPARSE_PCD_VALUE_EMPTY Valid = True Cause = "" if Type not in ["UINT8", "UINT16", "UINT32", "UINT64", "VOID*", "BOOLEAN"]: return False, ST.ERR_DECPARSE_PCD_TYPE if Type == "VOID*": if not ((Value.startswith('L"') or Value.startswith('"') and \ Value.endswith('"')) or (IsValidCArray(Value)) or (IsValidCFormatGuid(Value)) \ or (IsValidNList(Value)) or (CheckGuidRegFormat(Value)) ): return False, ST.ERR_DECPARSE_PCD_VOID % (Value, Type) RealString = Value[Value.find('"') + 1 :-1] if RealString: if not IsValidBareCString(RealString): return False, ST.ERR_DECPARSE_PCD_VOID % (Value, Type) elif Type == 'BOOLEAN': if Value in ['TRUE', 'FALSE', 'true', 'false', 'True', 'False', '0x1', '0x01', '1', '0x0', '0x00', '0']: return True, "" Valid, Cause = IsValidStringTest(Value, True) if not Valid: Valid, Cause = IsValidFeatureFlagExp(Value, True) if not Valid: return False, Cause else: if Value and (Value[0] == '-' or Value[0] == '+'): return False, ST.ERR_DECPARSE_PCD_INT_NEGTIVE % (Value, Type) try: StrVal = Value if Value and not Value.startswith('0x') \ and not Value.startswith('0X'): Value = Value.lstrip('0') if not Value: return True, "" Value = long(Value, 0) TypeLenMap = { # # 0x00 - 0xff # 'UINT8' : 2, # # 0x0000 - 0xffff # 'UINT16' : 4, # # 0x00000000 - 0xffffffff # 'UINT32' : 8, # # 0x0 - 0xffffffffffffffff # 'UINT64' : 16 } HexStr = hex(Value) # # First two chars of HexStr are 0x and tail char is L # if TypeLenMap[Type] < len(HexStr) - 3: return False, ST.ERR_DECPARSE_PCD_INT_EXCEED % (StrVal, Type) except BaseException: Valid, Cause = IsValidLogicalExpr(Value, True) if not Valid: return False, Cause return True, ""