Skip to content

Commit

Permalink
Issue python#12885: Revert commits in 3.4 branch which is security-on…
Browse files Browse the repository at this point in the history
…ly fixes.
  • Loading branch information
jaraco committed Sep 2, 2016
1 parent 6f5d3fd commit 79ae967
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 69 deletions.
48 changes: 27 additions & 21 deletions Lib/distutils/filelist.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

import os, re
import fnmatch
import functools
from distutils.util import convert_path
from distutils.errors import DistutilsTemplateError, DistutilsInternalError
from distutils import log
Expand Down Expand Up @@ -243,28 +242,35 @@ def exclude_pattern (self, pattern,
# ----------------------------------------------------------------------
# Utility functions

def _find_all_simple(path):
"""
Find all files under 'path'
"""
results = (
os.path.join(base, file)
for base, dirs, files in os.walk(path, followlinks=True)
for file in files
)
return filter(os.path.isfile, results)


def findall(dir=os.curdir):
"""Find all files under 'dir' and return the list of full filenames
(relative to 'dir').
"""
Find all files under 'dir' and return the list of full filenames.
Unless dir is '.', return full filenames with dir prepended.
"""
files = _find_all_simple(dir)
if dir == os.curdir:
make_rel = functools.partial(os.path.relpath, start=dir)
files = map(make_rel, files)
return list(files)
from stat import ST_MODE, S_ISREG, S_ISDIR, S_ISLNK

list = []
stack = [dir]
pop = stack.pop
push = stack.append

while stack:
dir = pop()
names = os.listdir(dir)

for name in names:
if dir != os.curdir: # avoid the dreaded "./" syndrome
fullname = os.path.join(dir, name)
else:
fullname = name

# Avoid excess stat calls -- just one will do, thank you!
stat = os.stat(fullname)
mode = stat[ST_MODE]
if S_ISREG(mode):
list.append(fullname)
elif S_ISDIR(mode) and not S_ISLNK(mode):
push(fullname)
return list


def glob_to_re(pattern):
Expand Down
48 changes: 2 additions & 46 deletions Lib/distutils/tests/test_filelist.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,8 @@
from distutils.log import WARN
from distutils.errors import DistutilsTemplateError
from distutils.filelist import glob_to_re, translate_pattern, FileList
from distutils import filelist

import test.support
from test.support import captured_stdout, run_unittest
from test.support import captured_stdout
from distutils.tests import support

MANIFEST_IN = """\
Expand Down Expand Up @@ -294,47 +292,5 @@ def test_process_template(self):
self.assertWarnings()


class FindAllTestCase(unittest.TestCase):
@test.support.skip_unless_symlink
def test_missing_symlink(self):
with test.support.temp_cwd():
os.symlink('foo', 'bar')
self.assertEqual(filelist.findall(), [])

def test_basic_discovery(self):
"""
When findall is called with no parameters or with
'.' as the parameter, the dot should be omitted from
the results.
"""
with test.support.temp_cwd():
os.mkdir('foo')
file1 = os.path.join('foo', 'file1.txt')
test.support.create_empty_file(file1)
os.mkdir('bar')
file2 = os.path.join('bar', 'file2.txt')
test.support.create_empty_file(file2)
expected = [file2, file1]
self.assertEqual(sorted(filelist.findall()), expected)

def test_non_local_discovery(self):
"""
When findall is called with another path, the full
path name should be returned.
"""
with test.support.temp_dir() as temp_dir:
file1 = os.path.join(temp_dir, 'file1.txt')
test.support.create_empty_file(file1)
expected = [file1]
self.assertEqual(filelist.findall(temp_dir), expected)


def test_suite():
return unittest.TestSuite([
unittest.makeSuite(FileListTestCase),
unittest.makeSuite(FindAllTestCase),
])


if __name__ == "__main__":
run_unittest(test_suite())
unittest.main()
2 changes: 0 additions & 2 deletions Misc/NEWS
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,6 @@ Core and Builtins
Library
-------

- Issue #12885: Fix error when distutils encounters symlink.

- In the curses module, raise an error if window.getstr() or window.instr() is
passed a negative value.

Expand Down

0 comments on commit 79ae967

Please sign in to comment.