[Lldb-commits] [lldb] r135206 - in /lldb/trunk: source/Interpreter/CommandObject.cpp test/help/TestHelp.py

Johnny Chen johnny.chen at apple.com
Thu Jul 14 15:20:12 PDT 2011


Author: johnny
Date: Thu Jul 14 17:20:12 2011
New Revision: 135206

URL: http://llvm.org/viewvc/llvm-project?rev=135206&view=rev
Log:
Fixed a crasher where entering 'help disasm' on the command line would crash lldb.
The reasom of the crash is because of a missing entry in the argument table corresponding to eArgTypeUnsignedInteger.
Add such entry and modify the call site of the crash to go through a fail-fast API to retrieve the argument table.

Add a regression test to TestHelp.py.

Modified:
    lldb/trunk/source/Interpreter/CommandObject.cpp
    lldb/trunk/test/help/TestHelp.py

Modified: lldb/trunk/source/Interpreter/CommandObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Interpreter/CommandObject.cpp?rev=135206&r1=135205&r2=135206&view=diff
==============================================================================
--- lldb/trunk/source/Interpreter/CommandObject.cpp (original)
+++ lldb/trunk/source/Interpreter/CommandObject.cpp Thu Jul 14 17:20:12 2011
@@ -623,8 +623,9 @@
         && arg_name[len-1] == '>')
         arg_name_str = arg_name_str.substr (1, len-2);
 
+    const ArgumentTableEntry *table = GetArgumentTable();
     for (int i = 0; i < eArgTypeLastArg; ++i)
-        if (arg_name_str.compare (g_arguments_data[i].arg_name) == 0)
+        if (arg_name_str.compare (table[i].arg_name) == 0)
             return_type = g_arguments_data[i].arg_type;
 
     return return_type;
@@ -778,6 +779,7 @@
     { eArgTypeThreadID, "thread-id", CommandCompletions::eNoCompletion, { NULL, false }, "Thread ID number." },
     { eArgTypeThreadIndex, "thread-index", CommandCompletions::eNoCompletion, { NULL, false }, "Index into the process' list of threads." },
     { eArgTypeThreadName, "thread-name", CommandCompletions::eNoCompletion, { NULL, false }, "The thread's name." },
+    { eArgTypeUnsignedInteger, "unsigned-integer", CommandCompletions::eNoCompletion, { NULL, false }, "An unsigned integer." },
     { eArgTypeUnixSignal, "unix-signal", CommandCompletions::eNoCompletion, { NULL, false }, "A valid Unix signal name or number (e.g. SIGKILL, KILL or 9)." },
     { eArgTypeVarName, "variable-name", CommandCompletions::eNoCompletion, { NULL, false }, "The name of a variable in your program." },
     { eArgTypeValue, "value", CommandCompletions::eNoCompletion, { NULL, false }, "A value could be anything, depending on where and how it is used." },

Modified: lldb/trunk/test/help/TestHelp.py
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/test/help/TestHelp.py?rev=135206&r1=135205&r2=135206&view=diff
==============================================================================
--- lldb/trunk/test/help/TestHelp.py (original)
+++ lldb/trunk/test/help/TestHelp.py Thu Jul 14 17:20:12 2011
@@ -61,6 +61,11 @@
         self.expect("version",
             patterns = ['LLDB-' + (version_str if version_str else '[0-9]+')])
 
+    def test_help_should_not_crash_lldb(self):
+        """Command 'help disasm' should not crash lldb."""
+        self.runCmd("help disasm", check=False)
+        self.runCmd("help unsigned-integer")
+
     def test_help_should_not_hang_emacsshell(self):
         """Command 'settings set term-width 0' should not hang the help command."""
         self.runCmd("settings set term-width 0")





More information about the lldb-commits mailing list