chiark / gitweb /
fix scan_apk_androguard when parsing versionName without a dot (e.g. 5)
authorHans-Christoph Steiner <hans@eds.org>
Wed, 18 Apr 2018 10:31:48 +0000 (12:31 +0200)
committerHans-Christoph Steiner <hans@eds.org>
Wed, 18 Apr 2018 10:32:28 +0000 (12:32 +0200)
fixes de35f1b05bb864c2d51b278f933cfd9a39a96b16:

Traceback (most recent call last):
  File "/home/hans/code/fdroid/server/fdroid", line 164, in <module>
    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

index 2a31e8f121bbfec529d0880bf61fb152f80756f6..830a2252653dfb5cb7c7743d4d70351327d9f8f7 100644 (file)
@@ -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()