From 8f6fa2955dfd1bfca265368521f4f0b1dede9053 Mon Sep 17 00:00:00 2001 From: Torsten Grote Date: Mon, 3 Apr 2017 13:07:49 -0300 Subject: [PATCH] Fix bug when scanning invalid APKs and add a test for it --- fdroidserver/update.py | 2 +- tests/update.TestCase | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/fdroidserver/update.py b/fdroidserver/update.py index ee8accc2..6694e035 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -819,7 +819,7 @@ def scan_apk(apkcache, apkfilename, repodir, knownapks, use_date_from_apk): logging.error("Could not find {0} to remove it".format(apkfile)) else: logging.error("Failed to get apk information, skipping " + apkfile) - return True + return True, None, False for line in p.output.splitlines(): if line.startswith("package:"): try: diff --git a/tests/update.TestCase b/tests/update.TestCase index 63b1b096..df85b277 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -130,6 +130,25 @@ class UpdateTest(unittest.TestCase): self.assertIsNone(apk.get('obbMainFile')) self.assertIsNone(apk.get('obbPatchFile')) + def test_scan_invalid_apk(self): + os.chdir(os.path.dirname(__file__)) + if os.path.basename(os.getcwd()) != 'tests': + raise Exception('This test must be run in the "tests/" subdir') + + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.common.config = config + fdroidserver.update.config = config + fdroidserver.update.options.delete_unknown = False + + knownapks = fdroidserver.common.KnownApks() + apk = 'fake.ota.update_1234.zip' # this is not an APK, scanning should fail + (skip, apk, cachechanged) = fdroidserver.update.scan_apk({}, apk, 'repo', knownapks, False) + + self.assertTrue(skip) + self.assertIsNone(apk) + self.assertFalse(cachechanged) + if __name__ == "__main__": parser = optparse.OptionParser()