1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Fix GH-13199: Redundant prompt in phpdbg with libedit/readline

When using libedit/readline integration in phpdbg:

    ./configure --with-libedit --enable-phpdbg-readline

EOF makes editline write prompt again in local console mode. For
example, this can be noticed when reading phpt test files from STDIN and
running phpdbg:

    ./sapi/cli/php run-tests.php sapi/phpdbg

Closes GH-13199
This commit is contained in:
Peter Kokot
2024-08-02 08:33:57 +02:00
parent b282dd749f
commit dc670cb7f6
2 changed files with 29 additions and 9 deletions

4
NEWS
View File

@@ -35,6 +35,10 @@ PHP NEWS
- PDO_Firebird:
. Fix bogus fallthrough path in firebird_handle_get_attribute(). (nielsdos)
- PHPDBG:
. Fixed bug GH-13199 (EOF emits redundant prompt in phpdbg local console mode
with libedit/readline). (Peter Kokot)
- Soap:
. Fixed bug #55639 (Digest autentication dont work). (nielsdos)

View File

@@ -23,6 +23,10 @@
#include "phpdbg_prompt.h"
#include "phpdbg_io.h"
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
ZEND_EXTERN_MODULE_GLOBALS(phpdbg)
static inline const char *phpdbg_command_name(const phpdbg_command_t *command, char *buffer) {
@@ -745,17 +749,29 @@ PHPDBG_API char *phpdbg_read_input(const char *buffered) /* {{{ */
if ((PHPDBG_G(flags) & (PHPDBG_IS_STOPPING | PHPDBG_IS_RUNNING)) != PHPDBG_IS_STOPPING) {
if (buffered == NULL) {
#ifdef HAVE_PHPDBG_READLINE
char *cmd = readline(phpdbg_get_prompt());
PHPDBG_G(last_was_newline) = 1;
# ifdef HAVE_UNISTD_H
/* EOF makes readline write prompt again in local console mode and
ignored if compiled without readline integration. */
if (!isatty(PHPDBG_G(io)[PHPDBG_STDIN].fd)) {
char buf[PHPDBG_MAX_CMD];
phpdbg_write("%s", phpdbg_get_prompt());
phpdbg_consume_stdin_line(buf);
buffer = estrdup(buf);
} else
# endif
{
char *cmd = readline(phpdbg_get_prompt());
PHPDBG_G(last_was_newline) = 1;
if (!cmd) {
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
zend_bailout();
if (!cmd) {
PHPDBG_G(flags) |= PHPDBG_IS_QUITTING;
zend_bailout();
}
add_history(cmd);
buffer = estrdup(cmd);
free(cmd);
}
add_history(cmd);
buffer = estrdup(cmd);
free(cmd);
#else
phpdbg_write("%s", phpdbg_get_prompt());
phpdbg_consume_stdin_line(buf);