Issue 27775: shlex.split(None) causes infinite loop (original) (raw)

Created on 2016-08-16 08:27 by cool-RR, last changed 2022-04-11 14:58 by admin. 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: https://groups.google.com/forum/#!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.

History

Date

User

Action

Args

2022-04-11 14:58:34

admin

set

github: 71962

2016-08-16 13:19:40

r.david.murray

set

status: open -> closed

type: crash -> behavior

nosy: + r.david.murray
messages: +
resolution: not a bug
stage: resolved

2016-08-16 08:27:37

cool-RR

create