diff options
author | Tyson Andre <tysonandre775@hotmail.com> | 2020-09-05 16:52:14 -0400 |
---|---|---|
committer | Tyson Andre <tysonandre775@hotmail.com> | 2020-09-05 17:33:20 -0400 |
commit | 9439ca53227b23e9a0eb0173c80f712ed480fdd8 (patch) | |
tree | 39506705c4d682fa4d01035852368d69cb69955c | |
parent | aa613f8b1a4997b8a955422beee5c1e738b3e1e8 (diff) | |
download | php-git-9439ca53227b23e9a0eb0173c80f712ed480fdd8.tar.gz |
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
-rw-r--r-- | ext/readline/readline_cli.c | 4 |
1 files changed, 2 insertions, 2 deletions
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; |