From 7ea56f02c801f831928a3d56435bb150b7794ffd Mon Sep 17 00:00:00 2001 From: Christopher Ferris Date: Thu, 21 Oct 2021 00:20:18 +0000 Subject: [PATCH] Small script fixes. Fix a problem with python3 and the zipinfo processing of an apk. Add sorting of the zipinfo data since it's not guaranteed that the zip entries will be in sorted order, so sort them. Bug: https://github.com/android/ndk/issues/1587 Test: Ran a apk stack line through the script. Test: Ran the stack core unit tests. Change-Id: Ie5ea67ad54a6b2de077e53740c82265f6bf783c6 --- scripts/stack_core.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/stack_core.py b/scripts/stack_core.py index 6801fa1e6..22997bfb6 100755 --- a/scripts/stack_core.py +++ b/scripts/stack_core.py @@ -261,7 +261,8 @@ class TraceConverter: print("Cannot find apk", apk) return None, None - cmd = subprocess.Popen(["zipinfo", "-v", apk_full_path], stdout=subprocess.PIPE) + cmd = subprocess.Popen(["zipinfo", "-v", apk_full_path], stdout=subprocess.PIPE, + encoding='utf8') # Find the first central info marker. for line in cmd.stdout: if self.zipinfo_central_directory_line.search(line): @@ -284,6 +285,10 @@ class TraceConverter: if not file_name and offset >= start and offset < end: file_name = cur_name + # Make sure the offset_list is sorted, the zip file does not guarantee + # that the entries are in order. + offset_list = sorted(offset_list, key=lambda entry: entry[1]) + # Save the information from the zip. tmp_files = dict() self.apk_info[apk] = [apk_full_path, offset_list, tmp_files]