From: Tyson Andre Date: Sat, 5 Sep 2020 20:52:14 +0000 (-0400) Subject: Improve handling of `#[` in `php -a` X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9439ca53227b23e9a0eb0173c80f712ed480fdd8;p=php Improve handling of `#[` in `php -a` PHP treats `#ini_setting=value` as a call to `ini_set('ini_setting', 'value')`, and silently skips undeclared settings. This is a problem due to `#[` becoming supported attribute syntax: - `#[Attr] const X = 123;` (this is not a valid place to put an attribute) This does not create a constant. - `#[Attr] function test($x=false){}` also contains `=`. This does not create a function. Instead, only treat lines starting with `#` as a special case when the next character isn't `[` Closes GH-6085 --- diff --git a/ext/readline/readline_cli.c b/ext/readline/readline_cli.c index a463a89db4..d7e6f20c9f 100644 --- a/ext/readline/readline_cli.c +++ b/ext/readline/readline_cli.c @@ -518,7 +518,7 @@ TODO: } if (text[0] == '$') { retval = cli_completion_generator_var(text, textlen, &cli_completion_state); - } else if (text[0] == '#') { + } else if (text[0] == '#' && text[1] != '[') { retval = cli_completion_generator_ini(text, textlen, &cli_completion_state); } else { char *lc_text, *class_name_end; @@ -630,7 +630,7 @@ static int readline_shell_run(void) /* {{{ */ len = strlen(line); - if (line[0] == '#') { + if (line[0] == '#' && line[1] != '[') { char *param = strstr(&line[1], "="); if (param) { zend_string *cmd;