]> granicus.if.org Git - python/commitdiff
Fixed AttributeError when the regular expression starts from illegal escape.
authorSerhiy Storchaka <storchaka@gmail.com>
Mon, 10 Nov 2014 12:38:16 +0000 (14:38 +0200)
committerSerhiy Storchaka <storchaka@gmail.com>
Mon, 10 Nov 2014 12:38:16 +0000 (14:38 +0200)
Lib/sre_parse.py
Lib/test/test_re.py

index 2be392e35b79681247a2863f4ded60c639553d2c..fb622ec2357bee028715f5c76a05d42a0ed225a9 100644 (file)
@@ -211,6 +211,7 @@ class Tokenizer:
             string = str(string, 'latin1')
         self.decoded_string = string
         self.index = 0
+        self.next = None
         self.__next()
     def __next(self):
         index = self.index
index 2b72c0ff4b91228faec71d72ee7715746eb1bea3..b30abadd520d53663f6693064b8f0ec7543602a7 100644 (file)
@@ -531,6 +531,20 @@ class ReTests(unittest.TestCase):
         self.assertEqual(re.search(br"\d\D\w\W\s\S",
                                    b"1aa! a", re.LOCALE).group(0), b"1aa! a")
 
+    def test_other_escapes(self):
+        self.assertRaises(re.error, re.compile, "\\")
+        self.assertEqual(re.match(r"\(", '(').group(), '(')
+        self.assertIsNone(re.match(r"\(", ')'))
+        self.assertEqual(re.match(r"\\", '\\').group(), '\\')
+        self.assertEqual(re.match(r"\y", 'y').group(), 'y')
+        self.assertIsNone(re.match(r"\y", 'z'))
+        self.assertEqual(re.match(r"[\]]", ']').group(), ']')
+        self.assertIsNone(re.match(r"[\]]", '['))
+        self.assertEqual(re.match(r"[a\-c]", '-').group(), '-')
+        self.assertIsNone(re.match(r"[a\-c]", 'b'))
+        self.assertEqual(re.match(r"[\^a]+", 'a^').group(), 'a^')
+        self.assertIsNone(re.match(r"[\^a]+", 'b'))
+
     def test_string_boundaries(self):
         # See http://bugs.python.org/issue10713
         self.assertEqual(re.search(r"\b(abc)\b", "abc").group(1),