summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorzhijufan <zhijux.fan@intel.com>2018-10-15 09:02:31 +0800
committerYonghong Zhu <yonghong.zhu@intel.com>2018-10-16 14:44:50 +0800
commit03c36c36a3aaa9e8a6975ebdec35a9533d947ef5 (patch)
treeb41eb52ff65824334e233b109ddcf507078dd868
parentaa52648c1e6f26b6b8734119ab8f6ba2890a1dad (diff)
downloadedk2-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>
-rw-r--r--BaseTools/Source/Python/Common/Expression.py6
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