From 8c2e1fedfc8725842d941605068e1ee1cf7b2050 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Daniel=20Mart=C3=AD?= Date: Thu, 3 Dec 2015 16:35:46 +0100 Subject: [PATCH] Actually check that bools are valid The metadata check was omitting booleans and lists, as it was only taking strings. Fix this. --- fdroidserver/metadata.py | 47 ++++++++++++++++++++++------------------ 1 file changed, 26 insertions(+), 21 deletions(-) diff --git a/fdroidserver/metadata.py b/fdroidserver/metadata.py index 48611510..b0d32db0 100644 --- a/fdroidserver/metadata.py +++ b/fdroidserver/metadata.py @@ -387,6 +387,8 @@ class FieldValidator(): self.matching = matching if type(matching) is str: self.compiled = re.compile(matching) + else: + self.matching = set(self.matching) self.sep = sep self.fields = fields self.flags = flags @@ -394,25 +396,23 @@ class FieldValidator(): def _assert_regex(self, values, appid): for v in values: if not self.compiled.match(v): - raise MetaDataException("'%s' is not a valid %s in %s. " - % (v, self.name, appid) + - "Regex pattern: %s" % (self.matching)) + raise MetaDataException("'%s' is not a valid %s in %s. Regex pattern: %s" + % (v, self.name, appid, self.matching)) def _assert_list(self, values, appid): for v in values: if v not in self.matching: - raise MetaDataException("'%s' is not a valid %s in %s. " - % (v, self.name, appid) + - "Possible values: %s" % (", ".join(self.matching))) + raise MetaDataException("'%s' is not a valid %s in %s. Possible values: %s" + % (v, self.name, appid, ', '.join(self.matching))) def check(self, v, appid): - if type(v) is not str or not v: + if not v: return - if self.sep is not None: - values = v.split(self.sep) + if type(v) == list: + values = v else: values = [v] - if type(self.matching) is list: + if type(self.matching) is set: self._assert_list(values, appid) else: self._assert_regex(values, appid) @@ -444,12 +444,6 @@ valuetypes = { ["Litecoin"], []), - FieldValidator("bool", - r'([Yy]es|[Nn]o|[Tt]rue|[Ff]alse)', None, - ["Requires Root"], - ['submodules', 'oldsdkloc', 'forceversion', 'forcevercode', - 'novcheck']), - FieldValidator("Repo Type", ['git', 'git-svn', 'svn', 'hg', 'bzr', 'srclib'], None, ["Repo Type"], @@ -857,9 +851,9 @@ def post_metadata_parse(app): build.__dict__[k] = re.sub(esc_newlines, '', v).lstrip().rstrip() elif ftype == TYPE_BOOL: # TODO handle this using