From afe0c6a16799f116dbd9f5f7592d6b3f34584ff4 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Wed, 18 Apr 2018 12:31:48 +0200 Subject: [PATCH] fix scan_apk_androguard when parsing versionName without a dot (e.g. 5) fixes de35f1b05bb864c2d51b278f933cfd9a39a96b16: Traceback (most recent call last): File "/home/hans/code/fdroid/server/fdroid", line 164, in main() File "/home/hans/code/fdroid/server/fdroid", line 138, in main mod.main() File "/export/share/code/fdroid/server/fdroidserver/update.py", line 1932, in main apks, cachechanged = process_apks(apkcache, repodirs[0], knownapks, options.use_date_from_apk) File "/export/share/code/fdroid/server/fdroidserver/update.py", line 1459, in process_apks use_date_from_apk, ada, True) File "/export/share/code/fdroid/server/fdroidserver/update.py", line 1332, in process_apk apk = scan_apk(apkfile) File "/export/share/code/fdroid/server/fdroidserver/update.py", line 1051, in scan_apk scan_apk_androguard(apk, apk_file) File "/export/share/code/fdroid/server/fdroidserver/update.py", line 1220, in scan_apk_androguard res_id = arsc.get_id(apk['packageName'], res_id)[1] TypeError: 'NoneType' object is not subscriptable For example https://f-droid.org/archive/com.abitsinc.andr_5.apk: $ aapt dump badging archive/com.abitsinc.andr_5.apk |head -1 package: name='com.abitsinc.andr' versionCode='5' versionName='5' platformBuildVersionName='2.3.3' --- fdroidserver/update.py | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index 2a31e8f1..830a2252 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1213,12 +1213,13 @@ def scan_apk_androguard(apk, apkfile): versionName = apkobject.get_androidversion_name() if versionName: apk['versionName'] = versionName - try: # can be a literal value or a resId - res_id = int(versionName.replace("@", "0x"), 16) - res_id = arsc.get_id(apk['packageName'], res_id)[1] - apk['versionName'] = arsc.get_string(apk['packageName'], res_id)[1] - except ValueError: - pass + if versionName[0] == '@': + try: # can be a literal value or a resId + res_id = int(versionName.replace("@", "0x"), 16) + res_id = arsc.get_id(apk['packageName'], res_id)[1] + apk['versionName'] = arsc.get_string(apk['packageName'], res_id)[1] + except ValueError: + pass if apkobject.get_max_sdk_version() is not None: apk['maxSdkVersion'] = apkobject.get_max_sdk_version() -- 2.30.2