diff mbox

Small segfault fix when there is no python

Message ID wrby502iulo.fsf@sspiff.org
State Committed
Headers show

Commit Message

Doug Evans March 22, 2014, 7:02 a.m. UTC
Daniel Gutson <daniel.gutson@tallertechnologies.com> writes:
> Thanks Doug and Sergio!
>
>    Daniel.
>
>
> On Thu, Mar 20, 2014 at 2:52 PM, Doug Evans <dje@google.com> wrote:
>> On Thu, Mar 20, 2014 at 10:31 AM, Sergio Durigan Junior
>> <sergiodj@redhat.com> wrote:
>>> On Thursday, March 20 2014, Daniel Gutson wrote:
>>>
>>>> Hi,
>>>>
>>>>    the small attached patch prevents gdb to segfault when an extension
>>>> language definition has no ops,
>>>> which e.g. occurs when HAVE_PYTHON is not defined so
>>>> extension_language_python remains with ops in NULL.
>>>> This causes the line
>>>>    if (extlang->ops->eval_from_control_command != NULL)
>>>> (in eval_ext_lang_from_control_command) to dereference a null pointer.
>>>
>>> Hi Daniel,
>>>
>>> Thanks for the patch.  This is a simple patch so it doesn't need a
>>> copyright assignment from you.  However, if you intend to continue
>>> contributing to GDB, please e-mail me offlist and I can send you the
>>> papers to obtain the assignment.
>>>
>>> Just a few comments about formatting issues.
>>>
>>>>     2014-03-20    Daniel Gutson (daniel.gutson@tallertechnologies.com)
>>>>
>>>> gdb/
>>>>     * extension.c: (eval_ext_lang_from_control_command) Added check to
>>>> prevent dereference of null pointer.
>>>
>>> The ChangeLog format is wrong.  Take a look at the ChangeLog file for
>>> lots of examples, but basically you need to write:
>>>
>>> 2014-03-20  Your Name  <your@email>
>>>
>>>         * file.c (function): Added check to prevent blabla...
>>>
>>> Pay attention to the 2 spaces between the date, the name and the e-mail,
>>> and also to the TAB character indenting the description.
>>>
>>>> diff --git a/gdb/extension.c b/gdb/extension.c
>>>> index c2f502b..8357ee8 100644
>>>> --- a/gdb/extension.c
>>>> +++ b/gdb/extension.c
>>>> @@ -342,11 +342,14 @@ eval_ext_lang_from_control_command (struct command_line *cmd)
>>>>      {
>>>>        if (extlang->cli_control_type == cmd->control_type)
>>>>       {
>>>> -       if (extlang->ops->eval_from_control_command != NULL)
>>>> -         {
>>>> -           extlang->ops->eval_from_control_command (extlang, cmd);
>>>> -           return;
>>>> -         }
>>>> +      if (extlang->ops != NULL)
>>>> +        {
>>>> +         if (extlang->ops->eval_from_control_command != NULL)
>>>> +           {
>>>> +             extlang->ops->eval_from_control_command (extlang, cmd);
>>>> +             return;
>>>> +           }
>>>> +        }
>>>
>>> You could simplify this by writing:
>>>
>>>   if (extlang->ops != NULL &&
>>> extlang->ops->eval_from_control_command != NULL)
>>>
>>> If you don't want to join the two "if"s, then you don't need to put the
>>> braces on the outter "if", because it has one single statement.
>>>
>>> The patch looks good to me, but I'm not a maintainer and can't approve
>>> it.
>>>
>>> Thanks,
>>>
>>> --
>>> Sergio
>>
>>
>> I did an audit of all the uses of ->ops and think this is the only
>> one I missed.
>> I will commit with the needed changes.
>> Thanks for the patch!

Here's what I committed.
I added a testcase.

2014-03-21  Daniel Gutson  <daniel.gutson@tallertechnologies.com>

	* extension.c (eval_ext_lang_from_control_command): Avoid dereferencing
	NULL pointer.

testsuite/

2014-03-22  Doug Evans  <xdje42@gmail.com>

	* gdb.python/python.exp (python not supported): Verify multi-line
	python command issues an error.
	* gdb.guile/guile.exp (guile not supported): Verify multi-line
	guile command issues an error.
diff mbox

Patch

diff --git a/gdb/extension.c b/gdb/extension.c
index c2f502b..1146cc7 100644
--- a/gdb/extension.c
+++ b/gdb/extension.c
@@ -342,7 +342,8 @@  eval_ext_lang_from_control_command (struct command_line *cmd)
     {
       if (extlang->cli_control_type == cmd->control_type)
 	{
-	  if (extlang->ops->eval_from_control_command != NULL)
+	  if (extlang->ops != NULL
+	      && extlang->ops->eval_from_control_command != NULL)
 	    {
 	      extlang->ops->eval_from_control_command (extlang, cmd);
 	      return;

diff --git a/gdb/testsuite/gdb.python/python.exp b/gdb/testsuite/gdb.python/python.exp
index a470427..5b8d34a 100644
--- a/gdb/testsuite/gdb.python/python.exp
+++ b/gdb/testsuite/gdb.python/python.exp
@@ -41,6 +41,13 @@  gdb_test_multiple "python print (23)" "verify python support" {
       gdb_test "source $srcdir/$subdir/source2.py" \
 	  "Error in sourced command file:.*" \
 	  "source source2.py when python disabled"
+
+      # Verify multi-line python commands cause an error.
+      gdb_py_test_multiple "multi-line python command" \
+	  "python" "" \
+	  "print (23)" "" \
+	  "end" "not supported.*"
+
       return -1
     }
     -re "$gdb_prompt $"	{}
diff --git a/gdb/testsuite/gdb.guile/guile.exp b/gdb/testsuite/gdb.guile/guile.exp
index 2a171fe..f300d72 100644
--- a/gdb/testsuite/gdb.guile/guile.exp
+++ b/gdb/testsuite/gdb.guile/guile.exp
@@ -38,6 +38,13 @@  gdb_test_multiple "guile (display 23) (newline)" "verify guile support" {
       gdb_test "source $srcdir/$subdir/source2.scm" \
 	  "Error in sourced command file:.*" \
 	  "source source2.scm when guile disabled"
+
+      # Verify multi-line guile commands cause an error.
+      gdb_test_multiline "multi-line guile command" \
+	  "guile" "" \
+	  "(print 23)" "" \
+	  "end" "not supported.*"
+
       return
     }
     -re "$gdb_prompt $"	{}