BaseTools:Coding problems caused by special characters

BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1670

During BaseTools compiling under Chinese or Japanese
language Windows, python exception occurring.
UnicodeDecodeError: 'ascii' codec can't decode byte 0xbd
in position 3528: ordinal not in range(128)

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Zhiju.Fan <zhijux.fan@intel.com>
Reviewed-by: Bob Feng <bob.c.feng@intel.com>
This commit is contained in:
Fan, ZhijuX 2019-03-29 13:53:40 +08:00 committed by Feng, Bob C
parent 58742d7945
commit 1c27ec4236
5 changed files with 10 additions and 10 deletions

View File

@ -44,7 +44,7 @@ def RunCommand(WorkDir=None, *Args, **kwargs):
stdout, stderr = p.communicate() stdout, stderr = p.communicate()
message = "" message = ""
if stdout is not None: if stdout is not None:
message = stdout.decode() #for compatibility in python 2 and 3 message = stdout.decode(encoding='utf-8', errors='ignore') #for compatibility in python 2 and 3
if p.returncode != 0: if p.returncode != 0:
raise RuntimeError("Error while execute command \'{0}\' in direcotry {1}\n{2}".format(" ".join(Args), WorkDir, message)) raise RuntimeError("Error while execute command \'{0}\' in direcotry {1}\n{2}".format(" ".join(Args), WorkDir, message))

View File

@ -94,7 +94,7 @@ def SignPayloadSignTool (Payload, ToolPath, PfxFile):
if Process.returncode != 0: if Process.returncode != 0:
shutil.rmtree (TempDirectoryName) shutil.rmtree (TempDirectoryName)
print (Result[1].decode()) print (Result[1].decode(encoding='utf-8', errors='ignore'))
raise ValueError ('GenerateCapsule: error: signtool failed.') raise ValueError ('GenerateCapsule: error: signtool failed.')
# #
@ -132,12 +132,12 @@ def SignPayloadOpenSsl (Payload, ToolPath, SignerPrivateCertFile, OtherPublicCer
try: try:
Process = subprocess.Popen (Command, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True) Process = subprocess.Popen (Command, stdin = subprocess.PIPE, stdout = subprocess.PIPE, stderr = subprocess.PIPE, shell = True)
Result = Process.communicate(input = Payload) Result = Process.communicate(input = Payload)
Signature = Result[0] Signature = Result[0].decode(encoding='utf-8', errors='ignore')
except: except:
raise ValueError ('GenerateCapsule: error: can not run openssl.') raise ValueError ('GenerateCapsule: error: can not run openssl.')
if Process.returncode != 0: if Process.returncode != 0:
print (Result[1].decode()) print (Result[1].decode(encoding='utf-8', errors='ignore'))
raise ValueError ('GenerateCapsule: error: openssl failed.') raise ValueError ('GenerateCapsule: error: openssl failed.')
return Signature return Signature
@ -186,7 +186,7 @@ def VerifyPayloadOpenSsl (Payload, CertData, ToolPath, SignerPrivateCertFile, Ot
if Process.returncode != 0: if Process.returncode != 0:
shutil.rmtree (TempDirectoryName) shutil.rmtree (TempDirectoryName)
print (Result[1].decode()) print (Result[1].decode(encoding='utf-8', errors='ignore'))
raise ValueError ('GenerateCapsule: error: openssl failed.') raise ValueError ('GenerateCapsule: error: openssl failed.')
shutil.rmtree (TempDirectoryName) shutil.rmtree (TempDirectoryName)

View File

@ -1032,7 +1032,7 @@ def ParseFieldValue (Value):
p.stderr.close() p.stderr.close()
if err: if err:
raise BadExpression("DevicePath: %s" % str(err)) raise BadExpression("DevicePath: %s" % str(err))
out = out.decode() out = out.decode(encoding='utf-8', errors='ignore')
Size = len(out.split()) Size = len(out.split())
out = ','.join(out.split()) out = ','.join(out.split())
return '{' + out + '}', Size return '{' + out + '}', Size

View File

@ -122,7 +122,7 @@ if __name__ == '__main__':
if Process.returncode != 0: if Process.returncode != 0:
print('ERROR: Open SSL command not available. Please verify PATH or set OPENSSL_PATH') print('ERROR: Open SSL command not available. Please verify PATH or set OPENSSL_PATH')
sys.exit(Process.returncode) sys.exit(Process.returncode)
print(Version[0].decode()) print(Version[0].decode(encoding='utf-8', errors='ignore'))
# #
# Read input file into a buffer and save input filename # Read input file into a buffer and save input filename

View File

@ -84,7 +84,7 @@ if __name__ == '__main__':
if Process.returncode != 0: if Process.returncode != 0:
print('ERROR: Open SSL command not available. Please verify PATH or set OPENSSL_PATH') print('ERROR: Open SSL command not available. Please verify PATH or set OPENSSL_PATH')
sys.exit(Process.returncode) sys.exit(Process.returncode)
print(Version[0].decode()) print(Version[0].decode(encoding='utf-8', errors='ignore'))
args.PemFileName = [] args.PemFileName = []
@ -125,7 +125,7 @@ if __name__ == '__main__':
# Extract public key from private key into STDOUT # Extract public key from private key into STDOUT
# #
Process = subprocess.Popen('%s rsa -in %s -modulus -noout' % (OpenSslCommand, Item), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) Process = subprocess.Popen('%s rsa -in %s -modulus -noout' % (OpenSslCommand, Item), stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
PublicKeyHexString = Process.communicate()[0].split(b'=')[1].strip() PublicKeyHexString = Process.communicate()[0].decode(encoding='utf-8', errors='ignore').split(b'=')[1].strip()
if Process.returncode != 0: if Process.returncode != 0:
print('ERROR: Unable to extract public key from private key') print('ERROR: Unable to extract public key from private key')
sys.exit(Process.returncode) sys.exit(Process.returncode)
@ -138,7 +138,7 @@ if __name__ == '__main__':
# #
Process = subprocess.Popen('%s dgst -sha256 -binary' % (OpenSslCommand), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) Process = subprocess.Popen('%s dgst -sha256 -binary' % (OpenSslCommand), stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
Process.stdin.write (PublicKey) Process.stdin.write (PublicKey)
PublicKeyHash = PublicKeyHash + Process.communicate()[0] PublicKeyHash = PublicKeyHash + Process.communicate()[0].decode(encoding='utf-8', errors='ignore')
if Process.returncode != 0: if Process.returncode != 0:
print('ERROR: Unable to extract SHA 256 hash of public key') print('ERROR: Unable to extract SHA 256 hash of public key')
sys.exit(Process.returncode) sys.exit(Process.returncode)