From e75bf70be6b89eedabbb2ea5b33de9e92aba3f2b Mon Sep 17 00:00:00 2001 From: Hans-Christoph Steiner Date: Thu, 22 Feb 2018 14:30:39 +0100 Subject: [PATCH] signatures: future-proof fetching app ID info from APK We're not using platformBuildVersionName and it might go away just like it appeared: with no good reason or announcement. --- fdroidserver/common.py | 2 +- tests/common.TestCase | 38 ++++++++++++++++++++++++++++++++++---- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/fdroidserver/common.py b/fdroidserver/common.py index 9c20443a..b5ff274c 100644 --- a/fdroidserver/common.py +++ b/fdroidserver/common.py @@ -1990,7 +1990,7 @@ def get_apk_id_aapt(apkfile): :param apkfile: path to an APK file. :returns: triplet (appid, version code, version name) """ - r = re.compile("package: name='(?P.*)' versionCode='(?P.*)' versionName='(?P.*)' platformBuildVersionName='.*'") + r = re.compile("^package: name='(?P.*)' versionCode='(?P.*)' versionName='(?P.*)'.*") p = SdkToolsPopen(['aapt', 'dump', 'badging', apkfile], output=False) for line in p.output.splitlines(): m = r.match(line) diff --git a/tests/common.TestCase b/tests/common.TestCase index 1d5678dd..55af2558 100755 --- a/tests/common.TestCase +++ b/tests/common.TestCase @@ -541,10 +541,40 @@ class CommonTest(unittest.TestCase): self._set_build_tools() config['aapt'] = fdroidserver.common.find_sdk_tools_cmd('aapt') - appid, vercode, vername = fdroidserver.common.get_apk_id_aapt('repo/obb.main.twoversions_1101613.apk') - self.assertEqual('obb.main.twoversions', appid) - self.assertEqual('1101613', vercode) - self.assertEqual('0.1', vername) + testcases = [ + ('repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', '1101613', '0.1'), + ('OBBMainPatchCurrent.apk', 'obb.mainpatch.current', '1619', '0.1'), + ('OBBMainTwoVersions.apk', 'obb.main.twoversions', '1101613', '0.1'), + ('org.bitbucket.tickytacky.mirrormirror_1.apk', 'org.bitbucket.tickytacky.mirrormirror', '1', '1.0'), + ('org.bitbucket.tickytacky.mirrormirror_2.apk', 'org.bitbucket.tickytacky.mirrormirror', '2', '1.0.1'), + ('org.bitbucket.tickytacky.mirrormirror_3.apk', 'org.bitbucket.tickytacky.mirrormirror', '3', '1.0.2'), + ('org.bitbucket.tickytacky.mirrormirror_4.apk', 'org.bitbucket.tickytacky.mirrormirror', '4', '1.0.3'), + ('org.dyndns.fules.ck_20.apk', 'org.dyndns.fules.ck', '20', 'v1.6pre2'), + ('urzip.apk', 'info.guardianproject.urzip', '100', '0.1'), + ('urzip-badcert.apk', 'info.guardianproject.urzip', '100', '0.1'), + ('urzip-badsig.apk', 'info.guardianproject.urzip', '100', '0.1'), + ('urzip-release.apk', 'info.guardianproject.urzip', '100', '0.1'), + ('urzip-release-unsigned.apk', 'info.guardianproject.urzip', '100', '0.1'), + ('urzip-πÇÇπÇÇ现代汉语通用字-български-عربي1234.apk', 'info.guardianproject.urzip', '100', '0.1'), + ('repo/com.politedroid_3.apk', 'com.politedroid', '3', '1.2'), + ('repo/com.politedroid_4.apk', 'com.politedroid', '4', '1.3'), + ('repo/com.politedroid_5.apk', 'com.politedroid', '5', '1.4'), + ('repo/com.politedroid_6.apk', 'com.politedroid', '6', '1.5'), + ('repo/duplicate.permisssions_9999999.apk', 'duplicate.permisssions', '9999999', '0.3-7-gb817ac8'), + ('repo/info.zwanenburg.caffeinetile_4.apk', 'info.zwanenburg.caffeinetile', '4', '1.3'), + ('repo/obb.main.oldversion_1444412523.apk', 'obb.main.oldversion', '1444412523', '0.1'), + ('repo/obb.mainpatch.current_1619_another-release-key.apk', 'obb.mainpatch.current', '1619', '0.1'), + ('repo/obb.mainpatch.current_1619.apk', 'obb.mainpatch.current', '1619', '0.1'), + ('repo/obb.main.twoversions_1101613.apk', 'obb.main.twoversions', '1101613', '0.1'), + ('repo/obb.main.twoversions_1101615.apk', 'obb.main.twoversions', '1101615', '0.1'), + ('repo/obb.main.twoversions_1101617.apk', 'obb.main.twoversions', '1101617', '0.1'), + ('repo/urzip-; Рахма́нинов, [rɐxˈmanʲɪnəf] سيرجي_رخمانينوف 谢尔盖·.apk', 'info.guardianproject.urzip', '100', '0.1'), + ] + for apkfilename, appid, versionCode, versionName in testcases: + a, vc, vn = fdroidserver.common.get_apk_id_aapt(apkfilename) + self.assertEqual(appid, a) + self.assertEqual(versionCode, vc) + self.assertEqual(versionName, vn) with self.assertRaises(FDroidException): fdroidserver.common.get_apk_id_aapt('nope') -- 2.30.2