diff options
author | Hess Chen <hesheng.chen@intel.com> | 2015-07-08 05:43:22 +0000 |
---|---|---|
committer | hchen30 <hchen30@Edk2> | 2015-07-08 05:43:22 +0000 |
commit | fe90f4836a37fc7210aa9fd351b8ca786ee9bf23 (patch) | |
tree | 611a67a293c8fd93c81291bafe8a0c8a63220adc /BaseTools | |
parent | c581e5037dca6e1446972aed194f13c9cdd0b01b (diff) | |
download | edk2-platforms-fe90f4836a37fc7210aa9fd351b8ca786ee9bf23.tar.xz |
BaseTools/Upt: Add a BOM check for UNI file and fix some help message error
Add a BOM check for UNI file and fix some help message error
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hess Chen <hesheng.chen@intel.com>
Reviewed-by: YangX Li <yangx.li@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17876 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'BaseTools')
-rw-r--r-- | BaseTools/Source/Python/UPT/Library/ParserValidate.py | 9 | ||||
-rw-r--r-- | BaseTools/Source/Python/UPT/Library/UniClassObject.py | 16 | ||||
-rw-r--r-- | BaseTools/Source/Python/UPT/Logger/StringTable.py | 8 |
3 files changed, 29 insertions, 4 deletions
diff --git a/BaseTools/Source/Python/UPT/Library/ParserValidate.py b/BaseTools/Source/Python/UPT/Library/ParserValidate.py index bfb4bc749f..e973227898 100644 --- a/BaseTools/Source/Python/UPT/Library/ParserValidate.py +++ b/BaseTools/Source/Python/UPT/Library/ParserValidate.py @@ -721,3 +721,12 @@ def IsValidUserId(UserId): return False
return True
+#
+# Check if a UTF16-LE file has a BOM header
+#
+def CheckUTF16FileHeader(File):
+ FileIn = open(File, 'rb').read(2)
+ if FileIn != '\xff\xfe':
+ return False
+
+ return True
diff --git a/BaseTools/Source/Python/UPT/Library/UniClassObject.py b/BaseTools/Source/Python/UPT/Library/UniClassObject.py index 332ae273c7..c57bfdf57d 100644 --- a/BaseTools/Source/Python/UPT/Library/UniClassObject.py +++ b/BaseTools/Source/Python/UPT/Library/UniClassObject.py @@ -27,6 +27,7 @@ from Library.String import GetLineNo from Library.Misc import PathClass
from Library.Misc import GetCharIndexOutStr
from Library import DataType as DT
+from Library.ParserValidate import CheckUTF16FileHeader
##
# Static definitions
@@ -136,6 +137,8 @@ def ConvertSpecialUnicodes(Uni): # @retval LangName: Valid lanugage code in RFC 1766 format or None
#
def GetLanguageCode1766(LangName, File=None):
+ return LangName
+
length = len(LangName)
if length == 2:
if LangName.isalpha():
@@ -424,6 +427,13 @@ class UniFileClassObject(object): ToolError.FILE_NOT_FOUND,
ExtraData=File.Path)
+ #
+ # Check file header of the Uni file
+ #
+ if not CheckUTF16FileHeader(File.Path):
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,
+ ExtraData='The file %s is either invalid UTF-16LE or it is missing the BOM.' % File.Path)
+
try:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()
except UnicodeError:
@@ -570,11 +580,13 @@ class UniFileClassObject(object): StringEntryExistsFlag = 1
if not Line.endswith('"'):
- EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, ExtraData=File.Path)
+ EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,
+ ExtraData='''The line %s misses '"' at the end of it in file %s'''
+ % (LineCount, File.Path))
elif Line.startswith(u'#language'):
if StringEntryExistsFlag == 2:
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID,
- Message=ST.ERR_UNIPARSE_LINEFEED_UP_EXIST % Line, ExtraData=File.Path)
+ Message=ST.ERR_UNI_MISS_STRING_ENTRY % Line, ExtraData=File.Path)
StringEntryExistsFlag = 0
else:
StringEntryExistsFlag = 0
diff --git a/BaseTools/Source/Python/UPT/Logger/StringTable.py b/BaseTools/Source/Python/UPT/Logger/StringTable.py index 5cc7b1496f..f15ac7f0bc 100644 --- a/BaseTools/Source/Python/UPT/Logger/StringTable.py +++ b/BaseTools/Source/Python/UPT/Logger/StringTable.py @@ -46,8 +46,11 @@ MSG_COPYRIGHT = _("Copyright (c) 2011 - 2015 Intel Corporation All Rights Reserv MSG_VERSION_COPYRIGHT = _("\n %s\n %s" % (MSG_VERSION, MSG_COPYRIGHT))
MSG_USAGE = _("%s [options]\n%s" % ("UPT", MSG_VERSION_COPYRIGHT))
MSG_DESCRIPTION = _("The UEFIUPT is used to create, " + \
- "install or remove a UEFI Distribution Package.")
-
+ "install or remove a UEFI Distribution Package. " + \
+ "If WORKSPACE environment variable is present, " + \
+ "then UPT will install packages to the location specified by WORKSPACE, " + \
+ "otherwise UPT will install packages to the current directory. " + \
+ "Option -n will override this default installation location")
#
# INF Parser related strings.
@@ -593,6 +596,7 @@ _("The string entry order in UNI file should be <AbstractStrings>, <DescriptionS ERR_UNIPARSE_STRTOKEN_FORMAT_ERROR = _("The String Token Type %s must be one of the '_PROMPT', '_HELP' and '_ERR_'.")
ERR_UNIPARSE_LINEFEED_UNDER_EXIST = _("Line feed should not exist under this line: %s.")
ERR_UNIPARSE_LINEFEED_UP_EXIST = _("Line feed should not exist up this line: %s.")
+ERR_UNI_MISS_STRING_ENTRY = _("String entry missed in this Entry, %s.")
ERR_UNI_MISS_LANGENTRY = _("Language entry missed in this Entry, %s.")
ERR_BINARY_HEADER_ORDER = _("Binary header must follow the file header.")
ERR_NO_SOURCE_HEADER = _("File header statement \"## @file\" must exist at the first place.")
|