Fix https handling under Wine. Better error checking.
[fedora-mingw.git] / readline / readline-5.2-005.patch
1                            READLINE PATCH REPORT
2                            =====================
3
4 Readline-Release: 5.2
5 Patch-ID: readline52-005
6
7 Bug-Reported-by:        Thomas Loeber <ifp@loeber1.de>
8 Bug-Reference-ID:       <200703082223.08919.ifp@loeber1.de>
9 Bug-Reference-URL:      http://lists.gnu.org/archive/html/bug-bash/2007-03/msg00036.html
10
11 Bug-Description:
12
13 When rl_read_key returns -1, indicating that readline's controlling terminal
14 has been invalidated for some reason (e.g., receiving a SIGHUP), the error
15 status was not reported correctly to the caller.  This could cause input
16 loops. 
17
18 Patch:
19
20 *** ../readline-5.2/complete.c  Fri Jul 28 11:35:49 2006
21 --- complete.c  Tue Mar 13 08:50:16 2007
22 ***************
23 *** 429,433 ****
24         if (c == 'n' || c == 'N' || c == RUBOUT)
25         return (0);
26 !       if (c == ABORT_CHAR)
27         _rl_abort_internal ();
28         if (for_pager && (c == NEWLINE || c == RETURN))
29 --- 440,444 ----
30         if (c == 'n' || c == 'N' || c == RUBOUT)
31         return (0);
32 !       if (c == ABORT_CHAR || c < 0)
33         _rl_abort_internal ();
34         if (for_pager && (c == NEWLINE || c == RETURN))
35 *** ../readline-5.2/input.c     Wed Aug 16 15:15:16 2006
36 --- input.c     Wed May  2 16:07:59 2007
37 ***************
38 *** 514,518 ****
39        int size;
40   {
41 !   int mb_len = 0;
42     size_t mbchar_bytes_length;
43     wchar_t wc;
44 --- 522,526 ----
45        int size;
46   {
47 !   int mb_len, c;
48     size_t mbchar_bytes_length;
49     wchar_t wc;
50 ***************
51 *** 521,531 ****
52     memset(&ps, 0, sizeof (mbstate_t));
53     memset(&ps_back, 0, sizeof (mbstate_t));
54 !   
55     while (mb_len < size)
56       {
57         RL_SETSTATE(RL_STATE_MOREINPUT);
58 !       mbchar[mb_len++] = rl_read_key ();
59         RL_UNSETSTATE(RL_STATE_MOREINPUT);
60   
61         mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
62         if (mbchar_bytes_length == (size_t)(-1))
63 --- 529,545 ----
64     memset(&ps, 0, sizeof (mbstate_t));
65     memset(&ps_back, 0, sizeof (mbstate_t));
66
67 !   mb_len = 0;  
68     while (mb_len < size)
69       {
70         RL_SETSTATE(RL_STATE_MOREINPUT);
71 !       c = rl_read_key ();
72         RL_UNSETSTATE(RL_STATE_MOREINPUT);
73   
74 +       if (c < 0)
75 +       break;
76
77 +       mbchar[mb_len++] = c;
78
79         mbchar_bytes_length = mbrtowc (&wc, mbchar, mb_len, &ps);
80         if (mbchar_bytes_length == (size_t)(-1))
81 ***************
82 *** 565,569 ****
83     c = first;
84     memset (mb, 0, mlen);
85 !   for (i = 0; i < mlen; i++)
86       {
87         mb[i] = (char)c;
88 --- 579,583 ----
89     c = first;
90     memset (mb, 0, mlen);
91 !   for (i = 0; c >= 0 && i < mlen; i++)
92       {
93         mb[i] = (char)c;
94 *** ../readline-5.2/isearch.c   Mon Dec 26 17:18:53 2005
95 --- isearch.c   Fri Mar  9 14:30:59 2007
96 ***************
97 *** 328,333 ****
98   
99     f = (rl_command_func_t *)NULL;
100 !  
101 !  /* Translate the keys we do something with to opcodes. */
102     if (c >= 0 && _rl_keymap[c].type == ISFUNC)
103       {
104 --- 328,340 ----
105   
106     f = (rl_command_func_t *)NULL;
107
108 !   if (c < 0)
109 !     {
110 !       cxt->sflags |= SF_FAILED;
111 !       cxt->history_pos = cxt->last_found_line;
112 !       return -1;
113 !     }
114
115 !   /* Translate the keys we do something with to opcodes. */
116     if (c >= 0 && _rl_keymap[c].type == ISFUNC)
117       {
118 *** ../readline-5.2/misc.c      Mon Dec 26 17:20:46 2005
119 --- misc.c      Fri Mar  9 14:44:11 2007
120 ***************
121 *** 147,150 ****
122 --- 147,152 ----
123           rl_clear_message ();
124           RL_UNSETSTATE(RL_STATE_NUMERICARG);
125 +         if (key < 0)
126 +           return -1;
127           return (_rl_dispatch (key, _rl_keymap));
128         }
129 *** ../readline-5.2/readline.c  Wed Aug 16 15:00:36 2006
130 --- readline.c  Fri Mar  9 14:47:24 2007
131 ***************
132 *** 646,649 ****
133 --- 669,677 ----
134       {
135         nkey = _rl_subseq_getchar (cxt->okey);
136 +       if (nkey < 0)
137 +       {
138 +         _rl_abort_internal ();
139 +         return -1;
140 +       }
141         r = _rl_dispatch_subseq (nkey, cxt->dmap, cxt->subseq_arg);
142         cxt->flags |= KSEQ_DISPATCHED;
143 *** ../readline-5.2/text.c      Fri Jul 28 11:55:27 2006
144 --- text.c      Sun Mar 25 13:41:38 2007
145 ***************
146 *** 858,861 ****
147 --- 864,870 ----
148     RL_UNSETSTATE(RL_STATE_MOREINPUT);
149   
150 +   if (c < 0)
151 +     return -1;
152
153   #if defined (HANDLE_SIGNALS)
154     if (RL_ISSTATE (RL_STATE_CALLBACK) == 0)
155 ***************
156 *** 1521,1524 ****
157 --- 1530,1536 ----
158     mb_len = _rl_read_mbchar (mbchar, MB_LEN_MAX);
159   
160 +   if (mb_len <= 0)
161 +     return -1;
162
163     if (count < 0)
164       return (_rl_char_search_internal (-count, bdir, mbchar, mb_len));
165 ***************
166 *** 1537,1540 ****
167 --- 1549,1555 ----
168     RL_UNSETSTATE(RL_STATE_MOREINPUT);
169   
170 +   if (c < 0)
171 +     return -1;
172
173     if (count < 0)
174       return (_rl_char_search_internal (-count, bdir, c));
175 *** ../readline-5.2/vi_mode.c   Sat Jul 29 16:42:28 2006
176 --- vi_mode.c   Fri Mar  9 15:02:11 2007
177 ***************
178 *** 887,890 ****
179 --- 887,897 ----
180     c = rl_read_key ();
181     RL_UNSETSTATE(RL_STATE_MOREINPUT);
182
183 +   if (c < 0)
184 +     {
185 +       *nextkey = 0;
186 +       return -1;
187 +     }
188
189     *nextkey = c;
190   
191 ***************
192 *** 903,906 ****
193 --- 910,918 ----
194           c = rl_read_key ();   /* real command */
195           RL_UNSETSTATE(RL_STATE_MOREINPUT);
196 +         if (c < 0)
197 +           {
198 +             *nextkey = 0;
199 +             return -1;
200 +           }
201           *nextkey = c;
202         }
203 ***************
204 *** 1225,1236 ****
205        _rl_callback_generic_arg *data;
206   {
207   #if defined (HANDLE_MULTIBYTE)
208 !   _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
209   #else
210     RL_SETSTATE(RL_STATE_MOREINPUT);
211 !   _rl_vi_last_search_char = rl_read_key ();
212     RL_UNSETSTATE(RL_STATE_MOREINPUT);
213   #endif
214   
215     _rl_callback_func = 0;
216     _rl_want_redisplay = 1;
217 --- 1243,1262 ----
218        _rl_callback_generic_arg *data;
219   {
220 +   int c;
221   #if defined (HANDLE_MULTIBYTE)
222 !   c = _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
223   #else
224     RL_SETSTATE(RL_STATE_MOREINPUT);
225 !   c = rl_read_key ();
226     RL_UNSETSTATE(RL_STATE_MOREINPUT);
227   #endif
228   
229 +   if (c <= 0)
230 +     return -1;
231
232 + #if !defined (HANDLE_MULTIBYTE)
233 +   _rl_vi_last_search_char = c;
234 + #endif
235
236     _rl_callback_func = 0;
237     _rl_want_redisplay = 1;
238 ***************
239 *** 1248,1251 ****
240 --- 1274,1278 ----
241        int count, key;
242   {
243 +   int c;
244   #if defined (HANDLE_MULTIBYTE)
245     static char *target;
246 ***************
247 *** 1294,1302 ****
248         {
249   #if defined (HANDLE_MULTIBYTE)
250 !         _rl_vi_last_search_mblen = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
251   #else
252           RL_SETSTATE(RL_STATE_MOREINPUT);
253 !         _rl_vi_last_search_char = rl_read_key ();
254           RL_UNSETSTATE(RL_STATE_MOREINPUT);
255   #endif
256         }
257 --- 1321,1335 ----
258         {
259   #if defined (HANDLE_MULTIBYTE)
260 !         c = _rl_read_mbchar (_rl_vi_last_search_mbchar, MB_LEN_MAX);
261 !         if (c <= 0)
262 !           return -1;
263 !         _rl_vi_last_search_mblen = c;
264   #else
265           RL_SETSTATE(RL_STATE_MOREINPUT);
266 !         c = rl_read_key ();
267           RL_UNSETSTATE(RL_STATE_MOREINPUT);
268 +         if (c < 0)
269 +           return -1;
270 +         _rl_vi_last_search_char = c;
271   #endif
272         }
273 ***************
274 *** 1468,1471 ****
275 --- 1501,1507 ----
276     RL_UNSETSTATE(RL_STATE_MOREINPUT);
277   
278 +   if (c < 0)
279 +     return -1;
280
281   #if defined (HANDLE_MULTIBYTE)
282     if (MB_CUR_MAX > 1 && rl_byte_oriented == 0)
283 ***************
284 *** 1486,1489 ****
285 --- 1522,1528 ----
286     _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
287   
288 +   if (c < 0)
289 +     return -1;
290
291     _rl_callback_func = 0;
292     _rl_want_redisplay = 1;
293 ***************
294 *** 1517,1520 ****
295 --- 1556,1562 ----
296       _rl_vi_last_replacement = c = _rl_vi_callback_getchar (mb, MB_LEN_MAX);
297   
298 +   if (c < 0)
299 +     return -1;
300
301     return (_rl_vi_change_char (count, c, mb));
302   }
303 ***************
304 *** 1651,1655 ****
305     RL_UNSETSTATE(RL_STATE_MOREINPUT);
306   
307 !   if (ch < 'a' || ch > 'z')
308       {
309         rl_ding ();
310 --- 1693,1697 ----
311     RL_UNSETSTATE(RL_STATE_MOREINPUT);
312   
313 !   if (ch < 0 || ch < 'a' || ch > 'z') /* make test against 0 explicit */
314       {
315         rl_ding ();
316 ***************
317 *** 1703,1707 ****
318         return 0;
319       }
320 !   else if (ch < 'a' || ch > 'z')
321       {
322         rl_ding ();
323 --- 1745,1749 ----
324         return 0;
325       }
326 !   else if (ch < 0 || ch < 'a' || ch > 'z')    /* make test against 0 explicit */
327       {
328         rl_ding ();