Title: `shlex.split(None)` causes infinite loop
Type: behavior Stage: resolved
Components: Library (Lib) Versions: Python 3.6
Status: closed Resolution: not a bug
Dependencies: Superseder:
Assigned To: Nosy List: cool-RR, r.david.murray
Priority: normal Keywords:

Created on 2016-08-16 08:27 by cool-RR, last changed 2016-08-16 13:19 by r.david.murray. This issue is now closed.

Messages (2)
msg272847 - (view) Author: Ram Rachum (cool-RR) * Date: 2016-08-16 08:27
I had a code that would freeze, and after debugging I realized that a bug in my code caused `shlex.split(None)` to be called, which puts Python in an infinite loop.

We probably want to do an `if not isinstance(s, ...): raise TypeError('Bla bla')` at the start of the `shlex` function, or maybe at `shlex.__init__`, or maybe both.

What bothers me though, is that it seems that shlex can accept both a string and a stream, so we should allow both of these and not others. Now, I don't know how to check whether it's a proper stream. Would `isinstance(s, io.IOBase)` be good enough? Will it catch all of the streams that people might use in `shlex.split`?

(Also, I recently proposed something related in python-ideas:!searchin/python-ideas/stream%7Csort:relevance/python-ideas/uYlnnH52VEA/PSHkQRtaBwAJ )
msg272854 - (view) Author: R. David Murray (r.david.murray) * (Python committer) Date: 2016-08-16 13:19
This is working as designed.  None means read from stdin.  It is already documented in a note under shlex.split, so there isn't a doc issue here either. 

(Aside: 'crash' means segfault, which this isn't.)

You could try to recast this as a feature request, but I think backward compatibility would shoot that down.  You could raise it on python-ideas if you want to, but it is quite likely that *someone* is using this feature, so I don't think it likely we'll want to change it.
Date User Action Args
2016-08-16 13:19:40r.david.murraysetstatus: open -> closed

type: crash -> behavior

nosy: + r.david.murray
messages: + msg272854
resolution: not a bug
stage: resolved
2016-08-16 08:27:37cool-RRcreate