Fix bug #81280 refuse to allow unicode chars in prompts

This commit is contained in:
Joe Watkins 2021-08-02 23:30:14 +02:00
parent 3a4d0d360d
commit a2e051921a
No known key found for this signature in database
GPG key ID: F9BA0ADA31CBD89E
3 changed files with 30 additions and 1 deletions

2
NEWS
View file

@ -5,6 +5,8 @@ PHP NEWS
- Core: - Core:
. Fixed bug #81342 (New ampersand token parsing depends on new line after it). . Fixed bug #81342 (New ampersand token parsing depends on new line after it).
(Nikita) (Nikita)
. Fixed bug #81280 (Unicode characters in cli.prompt causes segfault).
(krakjoe)
- Date: - Date:
. Fixed bug #79580 (date_create_from_format misses leap year). (Derick) . Fixed bug #79580 (date_create_from_format misses leap year). (Derick)

View file

@ -135,6 +135,7 @@ static zend_string *cli_get_prompt(char *block, char prompt) /* {{{ */
{ {
smart_str retval = {0}; smart_str retval = {0};
char *prompt_spec = CLIR_G(prompt) ? CLIR_G(prompt) : DEFAULT_PROMPT; char *prompt_spec = CLIR_G(prompt) ? CLIR_G(prompt) : DEFAULT_PROMPT;
bool unicode_warned = false;
do { do {
if (*prompt_spec == '\\') { if (*prompt_spec == '\\') {
@ -193,7 +194,16 @@ static zend_string *cli_get_prompt(char *block, char prompt) /* {{{ */
prompt_spec = prompt_end; prompt_spec = prompt_end;
} }
} else { } else {
if (!(*prompt_spec & 0x80)) {
smart_str_appendc(&retval, *prompt_spec); smart_str_appendc(&retval, *prompt_spec);
} else {
if (!unicode_warned) {
zend_error(E_WARNING,
"prompt contains unsupported unicode characters");
unicode_warned = true;
}
smart_str_appendc(&retval, '?');
}
} }
} while (++prompt_spec && *prompt_spec); } while (++prompt_spec && *prompt_spec);
smart_str_0(&retval); smart_str_0(&retval);

View file

@ -300,6 +300,23 @@ PHPDBG_API const char *phpdbg_get_prompt(void) /* {{{ */
return PHPDBG_G(prompt)[1]; return PHPDBG_G(prompt)[1];
} }
uint32_t pos = 0,
end = strlen(PHPDBG_G(prompt)[0]);
bool unicode_warned = false;
while (pos < end) {
if (PHPDBG_G(prompt)[0][pos] & 0x80) {
PHPDBG_G(prompt)[0][pos] = '?';
if (!unicode_warned) {
zend_error(E_WARNING,
"prompt contains unsupported unicode characters");
unicode_warned = true;
}
}
pos++;
}
/* create cached prompt */ /* create cached prompt */
#ifndef HAVE_LIBEDIT #ifndef HAVE_LIBEDIT
/* TODO: libedit doesn't seems to support coloured prompt */ /* TODO: libedit doesn't seems to support coloured prompt */