chiark / gitweb /
Ensure package names are valid
authorCiaran Gultnieks <ciaran@ciarang.com>
Mon, 26 Jan 2015 18:29:39 +0000 (18:29 +0000)
committerCiaran Gultnieks <ciaran@ciarang.com>
Mon, 26 Jan 2015 18:30:01 +0000 (18:30 +0000)
fdroidserver/common.py
tests/common.TestCase

index 45300317dce436536b5594ac8a2ac97854a0e88d..56d05bd1d4b3fc34d80728255bb7eaa784a39ed3 100644 (file)
@@ -1055,9 +1055,16 @@ def parse_androidmanifests(paths, ignoreversions=None):
     if max_version is None:
         max_version = "Unknown"
 
+    if not is_valid_package_name(max_package):
+        raise FDroidException("Invalid package name {0}".format(max_package))
+
     return (max_version, max_vercode, max_package)
 
 
+def is_valid_package_name(name):
+    return re.match("[A-Za-z_][A-Za-z_0-9.]+$", name)
+
+
 class FDroidException(Exception):
 
     def __init__(self, value, detail=None):
index d206637856b8efa8453e4acc95cc208deacc2a4d..0dca4f4d35c9239f26be22e93d0248fc77117971 100755 (executable)
@@ -83,6 +83,17 @@ class CommonTest(unittest.TestCase):
             self.assertFalse(debuggable,
                              "debuggable APK state was not properly parsed!")
 
+    def testPackageNameValidity(self):
+        for name in ["org.fdroid.fdroid",
+                     "org.f_droid.fdr0ID"]:
+            self.assertTrue(fdroidserver.common.is_valid_package_name(name),
+                    "{0} should be a valid package name".format(name))
+        for name in ["0rg.fdroid.fdroid",
+                     ".f_droid.fdr0ID",
+                     "org.fdroid/fdroid",
+                     "/org.fdroid.fdroid"]:
+            self.assertFalse(fdroidserver.common.is_valid_package_name(name),
+                    "{0} should not be a valid package name".format(name))
 
 if __name__ == "__main__":
     parser = optparse.OptionParser()