forked from OSchip/llvm-project
LLDBSwigPythonCallCommand crashes when a command script returns an object Add more robustness to LLDBSwigPythonCallCommand. It should check whether the returned Python object is a string, and only assign it as the error msg when the check holds. Also add a regression test. llvm-svn: 146584
This commit is contained in:
parent
da103bf9ec
commit
1d9cb8a184
|
@ -645,9 +645,11 @@ LLDBSwigPythonCallCommand
|
|||
err_msg.clear();
|
||||
retval = true;
|
||||
}
|
||||
else // return value is an error string
|
||||
else
|
||||
{
|
||||
err_msg.assign(PyString_AsString(pvalue));
|
||||
// return value is an error string
|
||||
if (PyString_CheckExact(pvalue))
|
||||
err_msg.assign(PyString_AsString(pvalue));
|
||||
retval = false;
|
||||
}
|
||||
Py_DECREF (pvalue);
|
||||
|
|
|
@ -37,6 +37,7 @@ class CmdPythonTestCase(TestBase):
|
|||
self.runCmd('command script delete tell_sync', check=False)
|
||||
self.runCmd('command script delete tell_async', check=False)
|
||||
self.runCmd('command script delete tell_curr', check=False)
|
||||
self.runCmd('command script delete bug11569', check=False)
|
||||
|
||||
# Execute the cleanup function during test case tear down.
|
||||
self.addTearDownHook(cleanup)
|
||||
|
@ -115,6 +116,12 @@ class CmdPythonTestCase(TestBase):
|
|||
self.expect('command script add -f foobar frame', error=True,
|
||||
substrs = ['cannot add command'])
|
||||
|
||||
# http://llvm.org/bugs/show_bug.cgi?id=11569
|
||||
# LLDBSwigPythonCallCommand crashes when a command script returns an object
|
||||
self.runCmd('command script add -f bug11569 bug11569')
|
||||
# This should not crash.
|
||||
self.runCmd('bug11569', check=False)
|
||||
|
||||
if __name__ == '__main__':
|
||||
import atexit
|
||||
lldb.SBDebugger.Initialize()
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
def bug11569(debugger, args, result, dict):
|
||||
"""
|
||||
http://llvm.org/bugs/show_bug.cgi?id=11569
|
||||
LLDBSwigPythonCallCommand crashes when a command script returns an object.
|
||||
"""
|
||||
return ["return", "a", "non-string", "should", "not", "crash", "LLDB"];
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
script import sys, os
|
||||
script sys.path.append(os.path.join(os.getcwd(), os.pardir))
|
||||
script import welcome
|
||||
script import bug11569
|
||||
command script add welcome --function welcome.welcome_impl
|
||||
command script add targetname --function welcome.target_name_impl
|
||||
command script add longwait --function welcome.print_wait_impl
|
||||
|
|
Loading…
Reference in New Issue