summaryrefslogtreecommitdiff
path: root/debian/patches/readline51-001.dpatch
blob: 268540be00a63c23954ba5a647e792e5b6b0adca (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#! /bin/sh -e

if [ $# -eq 3 -a "$2" = '-d' ]; then
    pdir="-d $3"
elif [ $# -ne 1 ]; then
    echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
    exit 1
fi
case "$1" in
    -patch) patch $pdir -f --no-backup-if-mismatch -p0 < $0;;
    -unpatch) patch $pdir -f --no-backup-if-mismatch -R -p0 < $0;;
    *)
	echo >&2 "`basename $0`: script expects -patch|-unpatch as argument"
	exit 1
esac
exit 0

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

Readline-Release: 5.1
Patch-ID: readline51-001

Bug-Reported-by: Andreas Schwab <schwab@suse.de>
Bug-Reference-ID: <20051213141916.4014A394BFABD@sykes.suse.de>
Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2005-12/msg00038.html

Bug-Description:

A problem with the readline callback interface can result in segmentation
faults when using the delete-char function via a multiple-key sequence.
Two consecutive calls to delete-char will crash the application calling
readline.

Patch:

*** ../readline-5.1/readline.c	Mon Jul  4 22:29:35 2005
--- lib/readline/readline.c	Tue Dec 20 17:38:29 2005
***************
*** 715,719 ****
  	  rl_dispatching = 1;
  	  RL_SETSTATE(RL_STATE_DISPATCHING);
! 	  r = (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
  	  RL_UNSETSTATE(RL_STATE_DISPATCHING);
  	  rl_dispatching = 0;
--- 715,719 ----
  	  rl_dispatching = 1;
  	  RL_SETSTATE(RL_STATE_DISPATCHING);
! 	  (*map[key].function)(rl_numeric_arg * rl_arg_sign, key);
  	  RL_UNSETSTATE(RL_STATE_DISPATCHING);
  	  rl_dispatching = 0;
*** ../readline-5.1/text.c	Sat Sep 24 19:06:07 2005
--- lib/readline/text.c	Tue Dec 20 17:38:26 2005
***************
*** 1072,1077 ****
       int count, key;
  {
-   int r;
- 
    if (count < 0)
      return (_rl_rubout_char (-count, key));
--- 1072,1075 ----
***************
*** 1091,1097 ****
  	rl_forward_byte (count, key);
  
!       r = rl_kill_text (orig_point, rl_point);
        rl_point = orig_point;
-       return r;
      }
    else
--- 1089,1094 ----
  	rl_forward_byte (count, key);
  
!       rl_kill_text (orig_point, rl_point);
        rl_point = orig_point;
      }
    else
***************
*** 1100,1105 ****
  
        new_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
!       return (rl_delete_text (rl_point, new_point));
      }
  }
  
--- 1097,1103 ----
  
        new_point = MB_NEXTCHAR (rl_line_buffer, rl_point, 1, MB_FIND_NONZERO);
!       rl_delete_text (rl_point, new_point);
      }
+   return 0;
  }