From 5cadb8ce2148979b6c464f6da5a8cd97425c5165 Mon Sep 17 00:00:00 2001 From: Joey Vagedes Date: Wed, 28 Jun 2023 00:27:22 +0800 Subject: BaseTools: BinToPcd: Resolve xdrlib deprecation Removes the dependency on xdrlib and replaces it with custom logic to pack a per the xdr requirements. Necessary as xdrlib is being deprecated in python 3.13. Cc: Rebecca Cran Cc: Liming Gao Cc: Bob Feng Cc: Yuwei Chen Cc: Michael D Kinney Signed-off-by: Joey Vagedes Reviewed-by: Liming Gao Reviewed-by: Michael D Kinney --- BaseTools/Scripts/BinToPcd.py | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'BaseTools') diff --git a/BaseTools/Scripts/BinToPcd.py b/BaseTools/Scripts/BinToPcd.py index 3bc557b841..460c08b7f7 100644 --- a/BaseTools/Scripts/BinToPcd.py +++ b/BaseTools/Scripts/BinToPcd.py @@ -14,6 +14,9 @@ import sys import argparse import re import xdrlib +import io +import struct +import math # # Globals for help information @@ -46,16 +49,24 @@ if __name__ == '__main__': raise argparse.ArgumentTypeError (Message) return Argument + def XdrPackBuffer (buffer): + packed_bytes = io.BytesIO() + for unpacked_bytes in buffer: + n = len(unpacked_bytes) + packed_bytes.write(struct.pack('>L',n)) + data = unpacked_bytes[:n] + n = math.ceil(n/4)*4 + data = data + (n - len(data)) * b'\0' + packed_bytes.write(data) + return packed_bytes.getvalue() + def ByteArray (Buffer, Xdr = False): if Xdr: # # If Xdr flag is set then encode data using the Variable-Length Opaque # Data format of RFC 4506 External Data Representation Standard (XDR). # - XdrEncoder = xdrlib.Packer () - for Item in Buffer: - XdrEncoder.pack_bytes (Item) - Buffer = bytearray (XdrEncoder.get_buffer ()) + Buffer = bytearray (XdrPackBuffer (Buffer)) else: # # If Xdr flag is not set, then concatenate all the data -- cgit v1.2.3