]> git.lizzy.rs Git - cheatdb.git/commitdiff
Improve MinetestCheck name validation
authorrubenwardy <rw@rubenwardy.com>
Tue, 18 Aug 2020 12:34:04 +0000 (13:34 +0100)
committerrubenwardy <rw@rubenwardy.com>
Tue, 18 Aug 2020 12:34:04 +0000 (13:34 +0100)
app/tasks/importtasks.py
app/tasks/minetestcheck/__init__.py
app/tasks/minetestcheck/tree.py

index 13abf1c6979204078209e2a97e152375b7947df7..ab5c0d56604425886207f2587d25527aa9d8e8b9 100644 (file)
@@ -164,11 +164,11 @@ def updateMetaFromRelease(self, id, path):
                        def getMetaPackages(names):
                                return [ MetaPackage.GetOrCreate(x, cache) for x in names ]
 
-                       provides = getMetaPackages(tree.getModNames())
+                       provides = tree.getModNames()
 
                        package = release.package
                        package.provides.clear()
-                       package.provides.extend(provides)
+                       package.provides.extend(getMetaPackages(tree.getModNames()))
 
                        # Delete all meta package dependencies
                        package.dependencies.filter(Dependency.meta_package != None).delete()
index dbc57adb4e08445cec4755e8b1f36fcd4571e014..deec46ed7ce00d3ce7f5bf068c2f816c05851696 100644 (file)
@@ -24,14 +24,14 @@ class ContentType(Enum):
 
                if self == ContentType.MOD:
                        if not other.isModLike():
-                               raise MinetestCheckError("expected a mod or modpack, found " + other.value)
+                               raise MinetestCheckError("Expected a mod or modpack, found " + other.value)
 
                elif self == ContentType.TXP:
                        if other != ContentType.UNKNOWN and other != ContentType.TXP:
                                raise MinetestCheckError("expected a " + self.value + ", found a " + other.value)
 
                elif other != self:
-                       raise MinetestCheckError("expected a " + self.value + ", found a " + other.value)
+                       raise MinetestCheckError("Expected a " + self.value + ", found a " + other.value)
 
 
 from .tree import PackageTreeNode, get_base_dir
index 8d66a8cf32d0e39b117a219040e7a3deb5860085..c79252a091f2a6b722263dc32fc1ee79577a235a 100644 (file)
@@ -1,7 +1,9 @@
-import os
+import os, re
 from . import MinetestCheckError, ContentType
 from .config import parse_conf
 
+basenamePattern = re.compile("^([a-z0-9_]+)$")
+
 def get_base_dir(path):
        if not os.path.isdir(path):
                raise IOError("Expected dir")
@@ -49,11 +51,16 @@ class PackageTreeNode:
 
                if self.type == ContentType.GAME:
                        if not os.path.isdir(baseDir + "/mods"):
-                               raise MinetestCheckError(("game at {} does not have a mods/ folder").format(self.relative))
+                               raise MinetestCheckError(("Game at {} does not have a mods/ folder").format(self.relative))
                        self.add_children_from_mod_dir(baseDir + "/mods")
+               elif self.type == ContentType.MOD:
+                       if self.name and not basenamePattern.match(self.name):
+                               raise MinetestCheckError(("Invalid base name for mod {} at {}, names must only contain a-z0-9_.") \
+                                       .format(self.name, self.relative))
                elif self.type == ContentType.MODPACK:
                        self.add_children_from_mod_dir(baseDir)
 
+
        def getMetaFilePath(self):
                filename = None
                if self.type == ContentType.GAME:
@@ -100,7 +107,6 @@ class PackageTreeNode:
 
                else:
                        try:
-                               import re
                                pattern = re.compile("^([a-z0-9_]+)\??$")
 
                                with open(self.baseDir + "/depends.txt", "r") as myfile:
@@ -153,6 +159,9 @@ class PackageTreeNode:
                                        raise MinetestCheckError(("Expecting mod or modpack, found {} at {} inside {}") \
                                                        .format(child.type.value, child.relative, self.type.value))
 
+                               if child.name is None:
+                                       raise MinetestCheckError(("Missing base name for mod at {}").format(self.relative))
+
                                self.children.append(child)
 
        def getModNames(self):