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:
parent
c581e5037d
commit
fe90f4836a
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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.")
|
||||||
|
|
Loading…
Reference in New Issue