]> granicus.if.org Git - php/commitdiff
Avoid modifying the return value of readline_completion_function()
authorChristoph M. Becker <cmbecker69@gmx.de>
Wed, 6 Jan 2021 17:56:02 +0000 (18:56 +0100)
committerChristoph M. Becker <cmbecker69@gmx.de>
Thu, 7 Jan 2021 12:46:09 +0000 (13:46 +0100)
The internal function `_readline_command_generator()` modifies the
internal array pointer of `readline_completion_function()`'s return
value.  We therefore separate the array, what also avoids failing
assertions regarding the array refcount.

Closes GH-6582.

ext/readline/readline.c

index 174556d4d3f4532a2c54d952bcc057958b3bfb5a..d0a4d7a0621e6116c4308d21ba3435a19508f180 100644 (file)
@@ -555,6 +555,7 @@ static char **_readline_completion_cb(const char *text, int start, int end)
 
        if (call_user_function(NULL, NULL, &_readline_completion, &_readline_array, 3, params) == SUCCESS) {
                if (Z_TYPE(_readline_array) == IS_ARRAY) {
+                       SEPARATE_ARRAY(&_readline_array);
                        if (zend_hash_num_elements(Z_ARRVAL(_readline_array))) {
                                matches = rl_completion_matches(text,_readline_command_generator);
                        } else {