From fe90f4836a37fc7210aa9fd351b8ca786ee9bf23 Mon Sep 17 00:00:00 2001 From: Hess Chen Date: Wed, 8 Jul 2015 05:43:22 +0000 Subject: [PATCH] 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 Reviewed-by: YangX Li git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17876 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Source/Python/UPT/Library/ParserValidate.py | 9 +++++++++ .../Source/Python/UPT/Library/UniClassObject.py | 16 ++++++++++++++-- .../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 ,