diff mbox

[Bug-readline] IPython/readline segfaults

Message ID 5512BF40.5000702@vu.nl
State Rejected
Headers show

Commit Message

ir. Tjeerd Pinkert March 25, 2015, 1:59 p.m. UTC
On 25-03-15 14:21, Gustavo Zacarias wrote:
> On 03/25/2015 07:55 AM, ir. Tjeerd Pinkert wrote:
>
>> Thanks, indeed, buildroot 2015.02 has 6.3 with no patches, although it
>> downloads the latest tar file. I'm trying to see if patching helps.
>
> I've sent a patch to bump it to patchlevel 8 after the 2015.02 release
> for another bug in commit b817e8c58117402561a61c0d749337f415c9c985
> (bash-related).
> So it'll be part of the 2015.05 release, or if you're in a rush just
> apply that patch to your tree.

I have tested it, and the patch works, no more segfaults so far.

I attach the patch file for buildroot, Gustavo, can you tell me if I did 
it in a correct way? Did you already include this one in buildroot too? 
I could not get the original patch working with the buildroot system so 
I generated my own diff which works for buildroot (that is 
readline-0001-63-002.patch). I saw there are more patches for readline 
6.3 available.

Tjeerd
READLINE PATCH REPORT
			   =====================

Readline-Release: 6.3
Patch-ID: readline63-002

Bug-Reported-by:	Anatol Pomozov <anatol.pomozov@gmail.com>
Bug-Reference-ID:	<CAOMFOmXy3mT2So5GQ5F-smCVArQuAeBwZ2QKzgCtMeXJoDeYOQ@mail.gmail.com>
Bug-Reference-URL:	http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html

Bug-Description:

When in callback mode, some readline commands can cause readline to seg
fault by passing invalid contexts to callback functions.

Patch (apply with `patch -p0'):

*** ../readline-6.3/readline.c	2013-10-28 14:58:06.000000000 -0400
--- readline.c	2014-03-10 14:15:02.000000000 -0400
***************
*** 745,749 ****
  
    RL_CHECK_SIGNALS ();
!   if (r == 0)			/* success! */
      {
        _rl_keyseq_chain_dispose ();
--- 745,750 ----
  
    RL_CHECK_SIGNALS ();
!   /* We only treat values < 0 specially to simulate recursion. */
!   if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0))	/* success! or failure! */
      {
        _rl_keyseq_chain_dispose ();
*** ../readline-6.3/patchlevel	2013-11-15 08:11:11.000000000 -0500
--- patchlevel	2014-03-21 08:28:40.000000000 -0400
***************
*** 1,3 ****
  # Do not edit -- exists only for use by patch
  
! 1
--- 1,3 ----
  # Do not edit -- exists only for use by patch
  
! 2

Comments

Gustavo Zacarias March 25, 2015, 2:07 p.m. UTC | #1
On 03/25/2015 10:59 AM, ir. Tjeerd Pinkert wrote:

> On 25-03-15 14:21, Gustavo Zacarias wrote:
>> On 03/25/2015 07:55 AM, ir. Tjeerd Pinkert wrote:
>>
>>> Thanks, indeed, buildroot 2015.02 has 6.3 with no patches, although it
>>> downloads the latest tar file. I'm trying to see if patching helps.
>>
>> I've sent a patch to bump it to patchlevel 8 after the 2015.02 release
>> for another bug in commit b817e8c58117402561a61c0d749337f415c9c985
>> (bash-related).
>> So it'll be part of the 2015.05 release, or if you're in a rush just
>> apply that patch to your tree.
> 
> I have tested it, and the patch works, no more segfaults so far.
> 
> I attach the patch file for buildroot, Gustavo, can you tell me if I did
> it in a correct way? Did you already include this one in buildroot too?
> I could not get the original patch working with the buildroot system so
> I generated my own diff which works for buildroot (that is
> readline-0001-63-002.patch). I saw there are more patches for readline
> 6.3 available.

Hi.
No need to CC Mike or the readline list, as far as they're concerned
this was already fixed with the patches upstream.
Well, it's easy, fetch the patch:

$ wget
"http://git.buildroot.net/buildroot/patch/?id=b817e8c58117402561a61c0d749337f415c9c985"
-O readline.patch

Apply the patch:

buildroot-2015.02 $ patch -p1 <readline.patch

And yes, the patches need a little tweak to apply cleanly (the patch
prefixing is done in a somewhat odd way), but i've handled that in the
patch i've sent for buildroot inclusion.
Regards.
diff mbox

Patch

--- a/readline.c	2013-10-28 19:58:06.000000000 +0100
+++ b/readline.c	2015-03-25 13:45:43.900418511 +0100
@@ -744,7 +744,8 @@  _rl_dispatch_callback (cxt)
     r = _rl_subseq_result (r, cxt->oldmap, cxt->okey, (cxt->flags & KSEQ_SUBSEQ));
 
   RL_CHECK_SIGNALS ();
-  if (r == 0)			/* success! */
+  /* We only treat values < 0 specially to simulate recursion. */
+  if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0))	/* success! or failure! */
     {
       _rl_keyseq_chain_dispose ();
       RL_UNSETSTATE (RL_STATE_MULTIKEY);