diff options
author | Jason R. Coombs <jaraco@jaraco.com> | 2013-11-02 17:01:46 (GMT) |
---|---|---|
committer | Jason R. Coombs <jaraco@jaraco.com> | 2013-11-02 17:01:46 (GMT) |
commit | ca9242f4f9c5bd496b578a4a2b2ed5fa91d94095 (patch) | |
tree | c0f12b4395f5bf56f6fd7c88971501e46f84fd15 | |
parent | 0aade6258c424799282f5ff82d5997a008168b35 (diff) | |
parent | 32bf5e1273621c926e21274afec12f4fea97fb03 (diff) | |
download | cpython-ca9242f4f9c5bd496b578a4a2b2ed5fa91d94095.zip cpython-ca9242f4f9c5bd496b578a4a2b2ed5fa91d94095.tar.gz cpython-ca9242f4f9c5bd496b578a4a2b2ed5fa91d94095.tar.bz2 |
Merge with 3.2 for Issue #19286.
-rw-r--r-- | Lib/distutils/command/build_py.py | 3 | ||||
-rw-r--r-- | Lib/distutils/tests/test_build_py.py | 31 | ||||
-rw-r--r-- | Misc/NEWS | 3 |
3 files changed, 36 insertions, 1 deletions
diff --git a/Lib/distutils/command/build_py.py b/Lib/distutils/command/build_py.py index 1371b3d..d48eb69 100644 --- a/Lib/distutils/command/build_py.py +++ b/Lib/distutils/command/build_py.py @@ -127,7 +127,8 @@ class build_py (Command): # Each pattern has to be converted to a platform-specific path filelist = glob(os.path.join(src_dir, convert_path(pattern))) # Files that match more than one pattern are only added once - files.extend([fn for fn in filelist if fn not in files]) + files.extend([fn for fn in filelist if fn not in files + and os.path.isfile(fn)]) return files def build_package_data(self): diff --git a/Lib/distutils/tests/test_build_py.py b/Lib/distutils/tests/test_build_py.py index e416edd..2ce9d44 100644 --- a/Lib/distutils/tests/test_build_py.py +++ b/Lib/distutils/tests/test_build_py.py @@ -121,6 +121,37 @@ class BuildPyTestCase(support.TempdirManager, found = os.listdir(os.path.join(cmd.build_lib, '__pycache__')) self.assertEqual(sorted(found), ['boiledeggs.%s.pyo' % imp.get_tag()]) + def test_dir_in_package_data(self): + """ + A directory in package_data should not be added to the filelist. + """ + # See bug 19286 + sources = self.mkdtemp() + pkg_dir = os.path.join(sources, "pkg") + + os.mkdir(pkg_dir) + open(os.path.join(pkg_dir, "__init__.py"), "w").close() + + docdir = os.path.join(pkg_dir, "doc") + os.mkdir(docdir) + open(os.path.join(docdir, "testfile"), "w").close() + + # create the directory that could be incorrectly detected as a file + os.mkdir(os.path.join(docdir, 'otherdir')) + + os.chdir(sources) + dist = Distribution({"packages": ["pkg"], + "package_data": {"pkg": ["doc/*"]}}) + # script_name need not exist, it just need to be initialized + dist.script_name = os.path.join(sources, "setup.py") + dist.script_args = ["build"] + dist.parse_command_line() + + try: + dist.run_commands() + except DistutilsFileError: + self.fail("failed package_data when data dir includes a dir") + def test_dont_write_bytecode(self): # makes sure byte_compile is not used dist = self.create_dist()[1] @@ -13,6 +13,9 @@ Core and Builtins Library ------- +- Issue #19286: Directories in ``package_data`` are no longer added to + the filelist, preventing failure outlined in the ticket. + - Issue #19435: Fix directory traversal attack on CGIHttpRequestHandler. Tests |