fnmatch: Fix regex undefined behavior.

Per https://docs.python.org/3.4/library/re.html#regular-expression-syntax ,
inline flags must appear at the beginning of expression. Reported as
http://bugs.python.org/issue21464
pull/118/head
Paul Sokolovsky 2014-05-10 00:39:24 +03:00
rodzic 69f67c407a
commit 666d235ab8
2 zmienionych plików z 10 dodań i 9 usunięć

Wyświetl plik

@ -107,4 +107,5 @@ def translate(pat):
res = '%s[%s]' % (res, stuff)
else:
res = res + re.escape(c)
return res + '\Z(?ms)'
# Original patterns is undefined, see http://bugs.python.org/issue21464
return '(?ms)' + res + '\Z'

Wyświetl plik

@ -63,14 +63,14 @@ class FnmatchTestCase(unittest.TestCase):
class TranslateTestCase(unittest.TestCase):
def test_translate(self):
self.assertEqual(translate('*'), '.*\Z(?ms)')
self.assertEqual(translate('?'), '.\Z(?ms)')
self.assertEqual(translate('a?b*'), 'a.b.*\Z(?ms)')
self.assertEqual(translate('[abc]'), '[abc]\Z(?ms)')
self.assertEqual(translate('[]]'), '[]]\Z(?ms)')
self.assertEqual(translate('[!x]'), '[^x]\Z(?ms)')
self.assertEqual(translate('[^x]'), '[\\^x]\Z(?ms)')
self.assertEqual(translate('[x'), '\\[x\Z(?ms)')
self.assertEqual(translate('*'), '(?ms).*\Z')
self.assertEqual(translate('?'), '(?ms).\Z')
self.assertEqual(translate('a?b*'), '(?ms)a.b.*\Z')
self.assertEqual(translate('[abc]'), '(?ms)[abc]\Z')
self.assertEqual(translate('[]]'), '(?ms)[]]\Z')
self.assertEqual(translate('[!x]'), '(?ms)[^x]\Z')
self.assertEqual(translate('[^x]'), '(?ms)[\\^x]\Z')
self.assertEqual(translate('[x'), '(?ms)\\[x\Z')
class FilterTestCase(unittest.TestCase):