[lldb/Python] Fix the infinitely looping Python prompt bug
authorJonas Devlieghere <jonas@devlieghere.com>
Tue, 16 Jun 2020 18:02:00 +0000 (11:02 -0700)
committerJonas Devlieghere <jonas@devlieghere.com>
Tue, 16 Jun 2020 18:05:19 +0000 (11:05 -0700)
commit4dd3dfe8e3266459d855008af78d611071ff99e2
treea87c48fd68260e395bdb1c7d2d0100fd30f28a1d
parented67f5e7ab59d378bb09153a0df132333c43c9cb
[lldb/Python] Fix the infinitely looping Python prompt bug

Executing commands below will get you bombarded by a wall of Python
command prompts (>>> ).

$ echo 'foo' | ./bin/lldb -o script
$ cat /tmp/script
script
print("foo")
$ lldb --source /tmp/script

The issue is that our custom input reader doesn't handle EOF. According
to the Python documentation, file.readline always includes a trailing
newline character unless the file ends with an incomplete line. An empty
string signals EOF. This patch raises an EOFError when that happens.

[1] https://docs.python.org/2/library/stdtypes.html#file.readline

Differential revision: https://reviews.llvm.org/D81898
lldb/source/Interpreter/embedded_interpreter.py
lldb/test/Shell/ScriptInterpreter/Python/eof.test [new file with mode: 0644]