chiark / gitweb /
Merge branch 'invalid-apk-fix' into 'master'
authorHans-Christoph Steiner <hans@guardianproject.info>
Mon, 3 Apr 2017 17:38:51 +0000 (17:38 +0000)
committerHans-Christoph Steiner <hans@guardianproject.info>
Mon, 3 Apr 2017 17:38:51 +0000 (17:38 +0000)
Fix bug when scanning invalid APKs and add a test for it

See merge request !246

fdroidserver/update.py
tests/update.TestCase

index 92075d8c2a48de82bea0093eb74a0d68b0672e08..9f5c280c83d3e795e756918aad749df8a70c990c 100644 (file)
@@ -793,7 +793,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:
index 63b1b09632796f5cb6d08def1147ec4d8d0d80b4..df85b27715e7de92b609c27f027dce9dddb4df95 100755 (executable)
@@ -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()