summaryrefslogtreecommitdiff
path: root/ext/readline/readline_cli.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/readline/readline_cli.c')
-rw-r--r--ext/readline/readline_cli.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/ext/readline/readline_cli.c b/ext/readline/readline_cli.c
index 69ebe117cb..6e6e9161be 100644
--- a/ext/readline/readline_cli.c
+++ b/ext/readline/readline_cli.c
@@ -347,11 +347,14 @@ static int cli_is_valid_code(char *code, size_t len, zend_string **prompt) /* {{
}
break;
case heredoc:
- if (code[i - (heredoc_len + 1)] == '\n' && !strncmp(code + i - heredoc_len, heredoc_tag, heredoc_len) && code[i] == '\n') {
- code_type = body;
- } else if (code[i - (heredoc_len + 2)] == '\n' && !strncmp(code + i - heredoc_len - 1, heredoc_tag, heredoc_len) && code[i-1] == ';' && code[i] == '\n') {
+ if (!strncmp(code + i - heredoc_len + 1, heredoc_tag, heredoc_len)) {
+ unsigned char c = code[i + 1];
+ char *p = code + i - heredoc_len;
+
+ if ((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'z') || (c >= '0' && c <= '9') || c == '_' || c >= 0x80) break;
+ while (*p == ' ' || *p == '\t') p--;
+ if (*p != '\n') break;
code_type = body;
- valid_end = 1;
}
break;
case outside: