Fix segfault resulting from empty print prompt
authorPavel Labath <labath@google.com>
Fri, 5 May 2017 11:51:21 +0000 (11:51 +0000)
committerPavel Labath <labath@google.com>
Fri, 5 May 2017 11:51:21 +0000 (11:51 +0000)
commit38c2059aec111174bcdc06c8006d998c513c8b8c
treef1d168b7952aadc8ed2490bf271f8ad4cf8b28fb
parent1b74f8c51f7fb44d47336f7431b427326230d47e
Fix segfault resulting from empty print prompt

Summary:
I have found a way to segfault lldb in 7 keystrokes! Steps to reproduce:
1) Launch lldb
2) Type `print` and hit enter. lldb will now prompt you to type a list of
    expressions, followed by an empty line.
3) Hit enter, indicating the end of your input.
4) Segfault!

After some investigation, I've found the issue in Host/common/Editline.cpp.
Editline::MoveCursor() relies on m_input_lines not being empty when the `to`
argument is CursorPosition::BlockEnd. This scenario, as far as I can tell,
occurs in one specific instance: In Editline::EndOrAddLineCommand() when the
list of lines being processed contains exactly one string (""). Meeting this
condition is fairly simple, I have posted steps to reproduce above.

Reviewers: krytarowski, zturner, labath

Reviewed By: labath

Subscribers: scott.smith, lldb-commits

Differential Revision: https://reviews.llvm.org/D32421
Patch by Alex Langford.

llvm-svn: 302225
lldb/packages/Python/lldbsuite/test/expression_command/multiline/TestMultilineExpressions.py
lldb/source/Host/common/Editline.cpp