diff --git a/fdroidserver/update.py b/fdroidserver/update.py index fd5dc924..091fc23f 100644 --- a/fdroidserver/update.py +++ b/fdroidserver/update.py @@ -1448,8 +1448,9 @@ def scan_apk_androguard(apk, apkfile): logging.error(_("Failed to get apk information, skipping {path}") .format(path=apkfile)) raise BuildException(_("Invalid APK")) - except FileNotFoundError: - logging.error(_("Could not open apk file for analysis")) + except (FileNotFoundError, zipfile.BadZipFile) as e: + logging.error(_("Could not open APK {path} for analysis: ").format(path=apkfile) + + str(e)) raise BuildException(_("Invalid APK")) apk['packageName'] = apkobject.get_package() diff --git a/tests/update.TestCase b/tests/update.TestCase index 322387be..f8760600 100755 --- a/tests/update.TestCase +++ b/tests/update.TestCase @@ -625,6 +625,20 @@ class UpdateTest(unittest.TestCase): with self.assertRaises(fdroidserver.exception.BuildException): fdroidserver.update.scan_apk('urzip-release-unsigned.apk') + def test_scan_apk_bad_zip(self): + config = dict() + fdroidserver.common.fill_config_defaults(config) + fdroidserver.common.config = config + fdroidserver.update.config = config + testdir = tempfile.mkdtemp(prefix=inspect.currentframe().f_code.co_name, dir=self.tmpdir) + os.chdir(testdir) + os.mkdir('repo') + apkfile = 'repo/badzip_1.apk' + with open(apkfile, 'w') as fp: + fp.write('this is not a zip file') + with self.assertRaises(fdroidserver.exception.BuildException): + fdroidserver.update.scan_apk(apkfile) + def test_process_apk(self): def _build_yaml_representer(dumper, data):