1
0
mirror of https://gitlab.com/fdroid/fdroidserver.git synced 2024-08-16 03:10:09 +02:00

metadata: handle empty YAML files without crashing

!311
This commit is contained in:
Hans-Christoph Steiner 2017-07-26 18:21:28 -07:00
parent 7bd171480f
commit c67f8e349c
2 changed files with 17 additions and 8 deletions

View File

@ -989,6 +989,7 @@ def parse_json_metadata(mf, app):
def parse_yaml_metadata(mf, app): def parse_yaml_metadata(mf, app):
yamldata = yaml.load(mf, Loader=YamlLoader) yamldata = yaml.load(mf, Loader=YamlLoader)
if yamldata:
app.update(yamldata) app.update(yamldata)
return app return app

View File

@ -500,6 +500,7 @@ class UpdateTest(unittest.TestCase):
print('tmptestsdir', tmptestsdir) print('tmptestsdir', tmptestsdir)
os.chdir(tmptestsdir) os.chdir(tmptestsdir)
os.mkdir('repo') os.mkdir('repo')
os.mkdir('metadata')
shutil.copy(os.path.join(localmodule, 'tests', 'urzip.apk'), 'repo') shutil.copy(os.path.join(localmodule, 'tests', 'urzip.apk'), 'repo')
config = dict() config = dict()
@ -515,16 +516,23 @@ class UpdateTest(unittest.TestCase):
fdroidserver.update.options.rename_apks = False fdroidserver.update.options.rename_apks = False
fdroidserver.update.options.allow_disabled_algorithms = False fdroidserver.update.options.allow_disabled_algorithms = False
apps = fdroidserver.metadata.read_metadata(xref=True)
self.assertEqual(0, len(apps))
knownapks = fdroidserver.common.KnownApks() knownapks = fdroidserver.common.KnownApks()
apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False) apks, cachechanged = fdroidserver.update.process_apks({}, 'repo', knownapks, False)
self.assertEqual(1, len(apks)) self.assertEqual(1, len(apks))
apk = apks[0] apk = apks[0]
testfile = 'metadata/info.guardianproject.urzip.yml'
# create empty 0 byte .yml file, run read_metadata, it should work
open(testfile, 'a').close()
apps = fdroidserver.metadata.read_metadata(xref=True)
self.assertEqual(1, len(apps))
os.remove(testfile)
# test using internal template # test using internal template
apps = fdroidserver.metadata.read_metadata(xref=True)
self.assertEqual(0, len(apps))
fdroidserver.update.create_metadata_from_template(apk) fdroidserver.update.create_metadata_from_template(apk)
self.assertTrue(os.path.exists('metadata/info.guardianproject.urzip.yml')) self.assertTrue(os.path.exists(testfile))
apps = fdroidserver.metadata.read_metadata(xref=True) apps = fdroidserver.metadata.read_metadata(xref=True)
self.assertEqual(1, len(apps)) self.assertEqual(1, len(apps))
for app in apps.values(): for app in apps.values():
@ -533,11 +541,11 @@ class UpdateTest(unittest.TestCase):
break break
# test using external template.yml # test using external template.yml
os.remove('metadata/info.guardianproject.urzip.yml') os.remove(testfile)
self.assertFalse(os.path.exists('metadata/info.guardianproject.urzip.yml')) self.assertFalse(os.path.exists(testfile))
shutil.copy(os.path.join(localmodule, 'examples', 'template.yml'), tmptestsdir) shutil.copy(os.path.join(localmodule, 'examples', 'template.yml'), tmptestsdir)
fdroidserver.update.create_metadata_from_template(apk) fdroidserver.update.create_metadata_from_template(apk)
self.assertTrue(os.path.exists('metadata/info.guardianproject.urzip.yml')) self.assertTrue(os.path.exists(testfile))
apps = fdroidserver.metadata.read_metadata(xref=True) apps = fdroidserver.metadata.read_metadata(xref=True)
self.assertEqual(1, len(apps)) self.assertEqual(1, len(apps))
for app in apps.values(): for app in apps.values():
@ -545,7 +553,7 @@ class UpdateTest(unittest.TestCase):
self.assertEqual(1, len(app['Categories'])) self.assertEqual(1, len(app['Categories']))
self.assertEqual('Internet', app['Categories'][0]) self.assertEqual('Internet', app['Categories'][0])
break break
with open('metadata/info.guardianproject.urzip.yml') as fp: with open(testfile) as fp:
data = yaml.load(fp) data = yaml.load(fp)
self.assertEqual('urzip', data['Name']) self.assertEqual('urzip', data['Name'])
self.assertEqual('urzip', data['Summary']) self.assertEqual('urzip', data['Summary'])