Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 3eb00aa

Browse files
committed
ext/readline: readline_info fix usage when the buffer is not initialised
rl_initialise is only called when readline() is used so the global buffer might not be initialised yet.
1 parent a7d856d commit 3eb00aa

File tree

2 files changed

+35
-1
lines changed

2 files changed

+35
-1
lines changed

‎ext/readline/readline.c‎

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,8 +187,11 @@ PHP_FUNCTION(readline_info)
187187
RETURN_THROWS();
188188
}
189189
#ifndef PHP_WIN32
190-
if (strlen(oldstr) < Z_STRLEN_P(value)) {
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);
194197
rl_end = Z_STRLEN_P(value);
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
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+
"

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /