Fixed #29132: Updated shlex to work better with punctuation chars in POSIX mode.
Thanks to Evan_ for the report and patch.
This commit is contained in:
parent
2e1b6ea4b7
commit
61eda7260a
10
Lib/shlex.py
10
Lib/shlex.py
|
@ -232,11 +232,6 @@ class shlex:
|
|||
break # emit current token
|
||||
else:
|
||||
continue
|
||||
elif self.posix and nextchar in self.quotes:
|
||||
self.state = nextchar
|
||||
elif self.posix and nextchar in self.escape:
|
||||
escapedstate = 'a'
|
||||
self.state = nextchar
|
||||
elif self.state == 'c':
|
||||
if nextchar in self.punctuation_chars:
|
||||
self.token += nextchar
|
||||
|
@ -245,6 +240,11 @@ class shlex:
|
|||
self._pushback_chars.append(nextchar)
|
||||
self.state = ' '
|
||||
break
|
||||
elif self.posix and nextchar in self.quotes:
|
||||
self.state = nextchar
|
||||
elif self.posix and nextchar in self.escape:
|
||||
escapedstate = 'a'
|
||||
self.state = nextchar
|
||||
elif (nextchar in self.wordchars or nextchar in self.quotes
|
||||
or self.whitespace_split):
|
||||
self.token += nextchar
|
||||
|
|
|
@ -273,6 +273,14 @@ class ShlexTest(unittest.TestCase):
|
|||
# white space
|
||||
self.assertEqual(list(s), ['a', '&&', 'b', '||', 'c'])
|
||||
|
||||
def testPunctuationWithPosix(self):
|
||||
"""Test that punctuation_chars and posix behave correctly together."""
|
||||
# see Issue #29132
|
||||
s = shlex.shlex('f >"abc"', posix=True, punctuation_chars=True)
|
||||
self.assertEqual(list(s), ['f', '>', 'abc'])
|
||||
s = shlex.shlex('f >\\"abc\\"', posix=True, punctuation_chars=True)
|
||||
self.assertEqual(list(s), ['f', '>', '"abc"'])
|
||||
|
||||
def testEmptyStringHandling(self):
|
||||
"""Test that parsing of empty strings is correctly handled."""
|
||||
# see Issue #21999
|
||||
|
|
Loading…
Reference in New Issue