Kaynağa Gözat

Add checking of section names.

Jelmer Vernooij 13 yıl önce
ebeveyn
işleme
dafd66f286
2 değiştirilmiş dosya ile 27 ekleme ve 0 silme
  1. 13 0
      dulwich/config.py
  2. 14 0
      dulwich/tests/test_config.py

+ 13 - 0
dulwich/config.py

@@ -144,6 +144,13 @@ def _check_variable_name(name):
     return True
 
 
+def _check_section_name(name):
+    for c in name:
+        if not c.isalnum() and c not in ('-', '.'):
+            return False
+    return True
+
+
 class ConfigFile(ConfigDict):
     """A Git configuration file, like .git/config or ~/.gitconfig.
     """
@@ -168,8 +175,14 @@ class ConfigFile(ConfigDict):
                                 "Invalid subsection " + pts[1])
                         else:
                             pts[1] = pts[1][1:-1]
+                        if not _check_section_name(pts[0]):
+                            raise ValueError("invalid section name %s" %
+                                             pts[0])
                         section = (pts[0], pts[1])
                     else:
+                        if not _check_section_name(pts[0]):
+                            raise ValueError("invalid section name %s" %
+                                    pts[0])
                         pts = pts[0].split(".", 1)
                         if len(pts) == 2:
                             section = (pts[0], pts[1])

+ 14 - 0
dulwich/tests/test_config.py

@@ -23,6 +23,7 @@ from dulwich.config import (
     ConfigDict,
     ConfigFile,
     StackedConfig,
+    _check_section_name,
     _check_variable_name,
     _format_string,
     _escape_value,
@@ -187,3 +188,16 @@ class CheckVariableNameTests(TestCase):
         self.assertTrue(_check_variable_name("FOO"))
         self.assertTrue(_check_variable_name("foo"))
         self.assertTrue(_check_variable_name("foo-bar"))
+
+
+class CheckSectionNameTests(TestCase):
+
+    def test_invalid(self):
+        self.assertFalse(_check_section_name("foo "))
+        self.assertFalse(_check_section_name("bar,bar"))
+
+    def test_valid(self):
+        self.assertTrue(_check_section_name("FOO"))
+        self.assertTrue(_check_section_name("foo"))
+        self.assertTrue(_check_section_name("foo-bar"))
+        self.assertTrue(_check_section_name("bar.bar"))