[issue23076] list(pathlib.Path().glob("")) fails with IndexError

liu chang report at bugs.python.org
Thu Jan 1 19:42:51 CET 2015


liu chang added the comment:

hi pitrou, should we fix it in _make_selector(pattern_parts) function? 
origin code as:

def _make_selector(pattern_parts):
    pat = pattern_parts[0]
    child_parts = pattern_parts[1:]
    if pat == '**':
        cls = _RecursiveWildcardSelector
    elif '**' in pat:
        raise ValueError("Invalid pattern: '**' can only be an entire path component")
    elif _is_wildcard_pattern(pat):
        cls = _WildcardSelector
    else:
        cls = _PreciseSelector
    return cls(pat, child_parts)

Is it a good fix that: check the length of pattern_parts, if its length < 2, we set pat to empty str, set child_parts to a empty list。

A simple code like:

def _make_selector(pattern_parts):
    try:
        pat = pattern_parts[0]
        child_parts = pattern_parts[1:]
    except IndexError:
        pat = ""
        child_parts = []
    if pat == '**':
        cls = _RecursiveWildcardSelector
    elif '**' in pat:
        raise ValueError("Invalid pattern: '**' can only be an entire path component")
    elif _is_wildcard_pattern(pat):
        cls = _WildcardSelector
    else:
        cls = _PreciseSelector
    return cls(pat, child_parts)

----------

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue23076>
_______________________________________


More information about the Python-bugs-list mailing list