From de35f1b05bb864c2d51b278f933cfd9a39a96b16 Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Tue, 17 Apr 2018 12:15:51 +0200 Subject: [PATCH] update: handle APKs with a blank versionName Instead of just crashing, first try to use the versionName as written in the build metadata, otherwise just let it be blank. A blank versionName will cause fdroidclient < 1.3 to crash. Blank versionNames are not allowed in the .txt metadata format, only .yml. closes #477 closes #478 closes fdroidclient#1416 closes fdroidclient#1417 closes fdroidclient#1418 fdroiddata!3061 --- fdroidserver/index.py | 22 +++++++++++++++++- fdroidserver/update.py | 15 ++++++++---- tests/repo/duplicate.permisssions_9999999.apk | Bin 27507 -> 27446 bytes tests/repo/index-v1.json | 7 +++--- tests/repo/index.xml | 5 ++-- 5 files changed, 36 insertions(+), 13 deletions(-) diff --git a/fdroidserver/index.py b/fdroidserver/index.py index 2bb966b7..61552138 100644 --- a/fdroidserver/index.py +++ b/fdroidserver/index.py @@ -213,6 +213,16 @@ def make_v1(apps, packages, repodir, repodict, requestsdict, fdroid_signing_key_ if packageName not in apps: logging.info(_('Ignoring package without metadata: ') + package['apkName']) continue + if not package.get('versionName'): + app = apps[packageName] + versionCodeStr = str(package['versionCode']) # TODO build.versionCode should be int! + for build in app['builds']: + if build['versionCode'] == versionCodeStr: + versionName = build.get('versionName') + logging.info(_('Overriding blank versionName in {apkfilename} from metadata: {version}') + .format(apkfilename=package['apkName'], version=versionName)) + package['versionName'] = versionName + break if packageName in output_packages: packagelist = output_packages[packageName] else: @@ -479,7 +489,17 @@ def make_v0(apps, apks, repodir, repodict, requestsdict, fdroid_signing_key_fing apkel = doc.createElement("package") apel.appendChild(apkel) - addElement('version', apk['versionName'], doc, apkel) + + versionName = apk.get('versionName') + if not versionName: + versionCodeStr = str(apk['versionCode']) # TODO build.versionCode should be int! + for build in app.builds: + if build['versionCode'] == versionCodeStr and 'versionName' in build: + versionName = build['versionName'] + break + if versionName: + addElement('version', versionName, doc, apkel) + addElement('versioncode', str(apk['versionCode']), doc, apkel) addElement('apkname', apk['apkName'], doc, apkel) addElementIfInApk('srcname', apk, 'srcname', doc, apkel) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index d7f21e4b..2a31e8f1 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1208,13 +1208,18 @@ def scan_apk_androguard(apk, apkfile): apk['packageName'] = apkobject.get_package() apk['versionCode'] = int(apkobject.get_androidversion_code()) - apk['versionName'] = apkobject.get_androidversion_name() - if apk['versionName'][0] == "@": - version_id = int(apk['versionName'].replace("@", "0x"), 16) - version_id = arsc.get_id(apk['packageName'], version_id)[1] - apk['versionName'] = arsc.get_string(apk['packageName'], version_id)[1] apk['name'] = apkobject.get_app_name() + 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 apkobject.get_max_sdk_version() is not None: apk['maxSdkVersion'] = apkobject.get_max_sdk_version() if apkobject.get_min_sdk_version() is not None: diff --git a/tests/repo/duplicate.permisssions_9999999.apk b/tests/repo/duplicate.permisssions_9999999.apk index ea440c5e057d65126717d7cf23878a02a54e7515..217b873177cf35325ee111b14d07a154c8e347f1 100644 GIT binary patch delta 7518 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 E1E|h#BLDyZ diff --git a/tests/repo/index-v1.json b/tests/repo/index-v1.json index 90d586ce..cda10cf2 100644 --- a/tests/repo/index-v1.json +++ b/tests/repo/index-v1.json @@ -288,13 +288,13 @@ { "added": 1513900800000, "apkName": "duplicate.permisssions_9999999.apk", - "hash": "3d5db5f1ee6fd1d5d9e3c97cc9139b447f538bacd9907f648ba96cfd0848321d", + "hash": "8367857fe75f85321ce2c344b34804d0bc193707f6ba03710d025d9030803434", "hashType": "sha256", "minSdkVersion": "18", "packageName": "duplicate.permisssions", "sig": "056c9f1554c40ba59a2103009c82b420", "signer": "659e1fd284549f70d13fb02c620100e27eeea3420558cce62b0f5d4cf2b77d84", - "size": 27507, + "size": 27446, "targetSdkVersion": "27", "uses-permission": [ [ @@ -336,8 +336,7 @@ null ] ], - "versionCode": 9999999, - "versionName": "0.3-7-gb817ac8" + "versionCode": 9999999 } ], "fake.ota.update": [ diff --git a/tests/repo/index.xml b/tests/repo/index.xml index 60136572..ef6988de 100644 --- a/tests/repo/index.xml +++ b/tests/repo/index.xml @@ -25,11 +25,10 @@ 9999999 - 0.3-7-gb817ac8 9999999 duplicate.permisssions_9999999.apk - 3d5db5f1ee6fd1d5d9e3c97cc9139b447f538bacd9907f648ba96cfd0848321d - 27507 + 8367857fe75f85321ce2c344b34804d0bc193707f6ba03710d025d9030803434 + 27446 18 27 2017-12-22