Skip to content

Instantly share code, notes, and snippets.

@grubberr
Last active June 10, 2016 11:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grubberr/3367f1d605e292103b576a17a46ef3c3 to your computer and use it in GitHub Desktop.
Save grubberr/3367f1d605e292103b576a17a46ef3c3 to your computer and use it in GitHub Desktop.
python os.walk traversal problem
#!/usr/bin/python3
"""
os.walk traversal problem
"""
import os
import sys
import logging
import tempfile
def _error(exc):
raise exc
def test_walk_recursion_limit():
" os.walk has to raise RecursionError "
tmpdirname = tempfile.mkdtemp(prefix='python-walk-test-')
os.chdir(tmpdirname)
for _ in range(sys.getrecursionlimit() + 1):
os.mkdir('x')
os.chdir('x')
os.chdir(tmpdirname)
for _ in os.walk(tmpdirname, onerror=_error):
pass
def test_walk_file_name_too_long():
" os.walk has to raise OSError(36, 'File name too long') "
tmpdirname = tempfile.mkdtemp(prefix='python-walk-test-')
os.chdir(tmpdirname)
names = []
while True:
name = 'x' * 10
names.append(name)
os.mkdir(name)
os.chdir(name)
full_path = os.path.join(tmpdirname, os.sep.join(names))
if len(full_path) > os.pathconf(tmpdirname, 'PC_PATH_MAX'):
break
os.chdir(tmpdirname)
for _ in os.walk(tmpdirname, onerror=_error):
pass
try:
test_walk_recursion_limit()
except RecursionError as e:
logging.error(e)
try:
test_walk_file_name_too_long()
except OSError as e:
logging.error(e.strerror)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment