summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGregory P. Smith <greg@mad-scientist.com>2009-11-01 20:36:24 (GMT)
committerGregory P. Smith <greg@mad-scientist.com>2009-11-01 20:36:24 (GMT)
commit6c4a725a37611fa60efe36f7e85ba8fbeab6dd15 (patch)
tree468771bfaf287cdf2b62edf6ece9a902cba59b3d
parentfc1c75d93f1fa1b911542afec46edd31506ff47c (diff)
downloadcpython-6c4a725a37611fa60efe36f7e85ba8fbeab6dd15.zip
cpython-6c4a725a37611fa60efe36f7e85ba8fbeab6dd15.tar.gz
cpython-6c4a725a37611fa60efe36f7e85ba8fbeab6dd15.tar.bz2
Merged revisions 74476 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k ................ r74476 | gregory.p.smith | 2009-08-16 11:58:46 -0700 (Sun, 16 Aug 2009) | 9 lines Merged revisions 74475 via svnmerge from svn+ssh://pythondev@svn.python.org/python/trunk ........ r74475 | gregory.p.smith | 2009-08-16 11:52:58 -0700 (Sun, 16 Aug 2009) | 2 lines Issue 6665: Fix fnmatch to properly match filenames with newlines in them. ........ ................
-rw-r--r--Lib/fnmatch.py2
-rw-r--r--Lib/test/test_fnmatch.py11
-rw-r--r--Misc/NEWS2
3 files changed, 13 insertions, 2 deletions
diff --git a/Lib/fnmatch.py b/Lib/fnmatch.py
index 0397549..30c0a92 100644
--- a/Lib/fnmatch.py
+++ b/Lib/fnmatch.py
@@ -113,4 +113,4 @@ def translate(pat):
res = '%s[%s]' % (res, stuff)
else:
res = res + re.escape(c)
- return res + "$"
+ return res + '\Z(?ms)'
diff --git a/Lib/test/test_fnmatch.py b/Lib/test/test_fnmatch.py
index 2f701ca..506c679 100644
--- a/Lib/test/test_fnmatch.py
+++ b/Lib/test/test_fnmatch.py
@@ -32,11 +32,18 @@ class FnmatchTestCase(unittest.TestCase):
check('a', 'b', 0)
# these test that '\' is handled correctly in character sets;
- # see SF bug #???
+ # see SF bug #409651
check('\\', r'[\]')
check('a', r'[!\]')
check('\\', r'[!\]', 0)
+ # test that filenames with newlines in them are handled correctly.
+ # http://bugs.python.org/issue6665
+ check('foo\nbar', 'foo*')
+ check('foo\nbar\n', 'foo*')
+ check('\nfoo', 'foo*', False)
+ check('\n', '*')
+
def test_mix_bytes_str(self):
self.assertRaises(TypeError, fnmatch, 'test', b'*')
self.assertRaises(TypeError, fnmatch, b'test', '*')
@@ -46,6 +53,8 @@ class FnmatchTestCase(unittest.TestCase):
def test_bytes(self):
self.check_match(b'test', b'te*')
self.check_match(b'test\xff', b'te*\xff')
+ self.check_match(b'foo\nbar', b'foo*')
+
def test_main():
support.run_unittest(FnmatchTestCase)
diff --git a/Misc/NEWS b/Misc/NEWS
index 03600de..dca9a00 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -37,6 +37,8 @@ Core and Builtins
Library
-------
+- Issue #6665: Fix fnmatch to properly match filenames with newlines in them.
+
- Issue #7246 & Issue #7208: getpass now properly flushes input before
reading from stdin so that existing input does not confuse it and
lead to incorrect entry or an IOError. It also properly flushes it