diff options
author | zhijufan <zhijux.fan@intel.com> | 2018-10-15 09:02:31 +0800 |
---|---|---|
committer | Yonghong Zhu <yonghong.zhu@intel.com> | 2018-10-16 14:44:50 +0800 |
commit | 03c36c36a3aaa9e8a6975ebdec35a9533d947ef5 (patch) | |
tree | b41eb52ff65824334e233b109ddcf507078dd868 /BaseTools/Source/Python | |
parent | aa52648c1e6f26b6b8734119ab8f6ba2890a1dad (diff) | |
download | edk2-03c36c36a3aaa9e8a6975ebdec35a9533d947ef5.tar.gz edk2-03c36c36a3aaa9e8a6975ebdec35a9533d947ef5.tar.bz2 edk2-03c36c36a3aaa9e8a6975ebdec35a9533d947ef5.zip |
BaseTools: Add check for the string type whether is same
Relational and equality operators require both operands to be of
the same type.
Treat the string 'A' and "A" as same type, but for "A" and L"A"
are not same type since one is general string, another is unicode
string.
True:'A'<'B', "A"<"B" 'A'<"B", L'A'<L'B', L"A"<L"B", L'A'<L"B"
Error:'A'<L'B', 'A'<L"B", "A'<L'B'
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
Reviewed-by: Jaben Carsey <jaben.carsey@intel.com>
Diffstat (limited to 'BaseTools/Source/Python')
-rw-r--r-- | BaseTools/Source/Python/Common/Expression.py | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/BaseTools/Source/Python/Common/Expression.py b/BaseTools/Source/Python/Common/Expression.py index ff9271031b..e398f7a034 100644 --- a/BaseTools/Source/Python/Common/Expression.py +++ b/BaseTools/Source/Python/Common/Expression.py @@ -297,8 +297,8 @@ class ValueExpression(BaseExpression): else:
raise BadExpression(ERR_EXPR_TYPE)
if isinstance(Oprand1, type('')) and isinstance(Oprand2, type('')):
- if (Oprand1.startswith('L"') and not Oprand2.startswith('L"')) or \
- (not Oprand1.startswith('L"') and Oprand2.startswith('L"')):
+ if ((Oprand1.startswith('L"') or Oprand1.startswith('L')) and (not Oprand2.startswith('L"')) and (not Oprand2.startswith("L'"))) or \
+ (((not Oprand1.startswith('L"')) and (not Oprand1.startswith("L'"))) and (Oprand2.startswith('L"') or Oprand2.startswith('L'))):
raise BadExpression(ERR_STRING_CMP % (Oprand1, Operator, Oprand2))
if 'in' in Operator and isinstance(Oprand2, type('')):
Oprand2 = Oprand2.split()
@@ -827,6 +827,8 @@ class ValueExpressionEx(ValueExpression): PcdValue = PcdValue.strip()
if PcdValue.startswith('{') and PcdValue.endswith('}'):
PcdValue = SplitPcdValueString(PcdValue[1:-1])
+ if ERR_STRING_CMP.split(':')[0] in Value.message:
+ raise BadExpression("Type: %s, Value: %s, %s" % (self.PcdType, PcdValue, Value))
if isinstance(PcdValue, type([])):
TmpValue = 0
Size = 0
|