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
This commit is contained in:
Hess Chen 2015-07-08 05:43:22 +00:00 committed by hchen30
parent c581e5037d
commit fe90f4836a
3 changed files with 29 additions and 4 deletions

View File

@ -721,3 +721,12 @@ def IsValidUserId(UserId):
return False return False
return True 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

View File

@ -27,6 +27,7 @@ from Library.String import GetLineNo
from Library.Misc import PathClass from Library.Misc import PathClass
from Library.Misc import GetCharIndexOutStr from Library.Misc import GetCharIndexOutStr
from Library import DataType as DT from Library import DataType as DT
from Library.ParserValidate import CheckUTF16FileHeader
## ##
# Static definitions # Static definitions
@ -136,6 +137,8 @@ def ConvertSpecialUnicodes(Uni):
# @retval LangName: Valid lanugage code in RFC 1766 format or None # @retval LangName: Valid lanugage code in RFC 1766 format or None
# #
def GetLanguageCode1766(LangName, File=None): def GetLanguageCode1766(LangName, File=None):
return LangName
length = len(LangName) length = len(LangName)
if length == 2: if length == 2:
if LangName.isalpha(): if LangName.isalpha():
@ -424,6 +427,13 @@ class UniFileClassObject(object):
ToolError.FILE_NOT_FOUND, ToolError.FILE_NOT_FOUND,
ExtraData=File.Path) 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: try:
FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines() FileIn = codecs.open(File.Path, mode='rb', encoding='utf_16').readlines()
except UnicodeError: except UnicodeError:
@ -570,11 +580,13 @@ class UniFileClassObject(object):
StringEntryExistsFlag = 1 StringEntryExistsFlag = 1
if not Line.endswith('"'): 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'): elif Line.startswith(u'#language'):
if StringEntryExistsFlag == 2: if StringEntryExistsFlag == 2:
EdkLogger.Error("Unicode File Parser", ToolError.FORMAT_INVALID, 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 StringEntryExistsFlag = 0
else: else:
StringEntryExistsFlag = 0 StringEntryExistsFlag = 0

View File

@ -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_VERSION_COPYRIGHT = _("\n %s\n %s" % (MSG_VERSION, MSG_COPYRIGHT))
MSG_USAGE = _("%s [options]\n%s" % ("UPT", MSG_VERSION_COPYRIGHT)) MSG_USAGE = _("%s [options]\n%s" % ("UPT", MSG_VERSION_COPYRIGHT))
MSG_DESCRIPTION = _("The UEFIUPT is used to create, " + \ 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. # 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_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_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_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_UNI_MISS_LANGENTRY = _("Language entry missed in this Entry, %s.")
ERR_BINARY_HEADER_ORDER = _("Binary header must follow the file header.") 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.") ERR_NO_SOURCE_HEADER = _("File header statement \"## @file\" must exist at the first place.")