File tree Expand file tree Collapse file tree 2 files changed +39
-3
lines changed Expand file tree Collapse file tree 2 files changed +39
-3
lines changed Original file line number Diff line number Diff line change @@ -186,12 +186,14 @@ PHP_FUNCTION(readline_info)
186186 if (!try_convert_to_string (value )) {
187187 RETURN_THROWS ();
188188 }
189- #ifndef PHP_WIN32
190- if (strlen (oldstr ) < Z_STRLEN_P (value )) {
189+ #if !defined(PHP_WIN32 ) && !HAVE_LIBEDIT
190+ if (!rl_line_buffer ) {
191+ rl_line_buffer = malloc (Z_STRLEN_P (value ) + 1 );
192+ } else if (strlen (oldstr ) < Z_STRLEN_P (value )) {
191193 rl_extend_line_buffer (Z_STRLEN_P (value ) + 1 );
194+ oldstr = rl_line_buffer ;
192195 }
193196 memcpy (rl_line_buffer , Z_STRVAL_P (value ), Z_STRLEN_P (value ) + 1 );
194- rl_end = Z_STRLEN_P (value );
195197#else
196198 char * tmp = strdup (Z_STRVAL_P (value ));
197199 if (tmp ) {
@@ -200,6 +202,9 @@ PHP_FUNCTION(readline_info)
200202 }
201203 rl_line_buffer = tmp ;
202204 }
205+ #endif
206+ #if !defined(PHP_WIN32 )
207+ rl_end = Z_STRLEN_P (value );
203208#endif
204209 }
205210 RETVAL_STRING (SAFE_STRING (oldstr ));
Original file line number Diff line number Diff line change 1+ --TEST--
2+ readline_info(): using line_buffer before rl_line_buffer is initialised.
3+ --EXTENSIONS--
4+ readline
5+ --SKIPIF--
6+ <?php if (READLINE_LIB == "libedit " ) die ("skip readline only " );
7+ if (getenv ('SKIP_REPEAT ' )) die ("skip readline has global state " );
8+ ?>
9+ --FILE--
10+ <?php
11+
12+ $ name = tempnam ('/tmp ' , 'readline.tmp ' );
13+
14+ var_dump (readline_info ('line_buffer ' ));
15+ readline_info ('line_buffer ' , 'abcdef ' );
16+ var_dump (readline_info ('line_buffer ' ));
17+ readline_add_history ('123 ' );
18+ readline_write_history ($ name );
19+ readline_info ('line_buffer ' , 'abcdefghijkl ' );
20+ var_dump (readline_info ('line_buffer ' ));
21+
22+ var_dump (file_get_contents ($ name ));
23+
24+ unlink ($ name );
25+ ?>
26+ --EXPECTF--
27+ string(0) ""
28+ string(6) "abcdef"
29+ string(12) "abcdefghijkl"
30+ string(4) "123
31+ "
You can’t perform that action at this time.
0 commit comments