diff --git a/Lib/re.py b/Lib/re.py index a33e34e4e1e..39e81fdf4fd 100644 --- a/Lib/re.py +++ b/Lib/re.py @@ -224,6 +224,8 @@ def _compile(*key): return p pattern, flags = key if isinstance(pattern, _pattern_type): + if flags: + raise ValueError('Cannot process flags argument with a compiled pattern') return pattern if not sre_compile.isstring(pattern): raise TypeError, "first argument must be string or compiled pattern" diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index aa403bac1a6..f1fdfba6137 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -108,6 +108,14 @@ class ReTests(unittest.TestCase): self.assertEqual(z, y) self.assertEqual(type(z), type(y)) + def test_bug_1661(self): + # Verify that flags do not get silently ignored with compiled patterns + pattern = re.compile('.') + self.assertRaises(ValueError, re.match, pattern, 'A', re.I) + self.assertRaises(ValueError, re.search, pattern, 'A', re.I) + self.assertRaises(ValueError, re.findall, pattern, 'A', re.I) + self.assertRaises(ValueError, re.compile, pattern, re.I) + def test_sub_template_numeric_escape(self): # bug 776311 and friends self.assertEqual(re.sub('x', r'\0', 'x'), '\0')