mirror of
https://github.com/php/php-src.git
synced 2024-09-22 02:17:32 +00:00
Add eventual escaping for phpdbg arguments
This commit is contained in:
parent
adcabcc125
commit
5b8981f12e
@ -729,8 +729,9 @@ PHPDBG_API int phpdbg_stack_execute(phpdbg_param_t *stack, zend_bool allow_async
|
|||||||
|
|
||||||
do {
|
do {
|
||||||
if (top->type == STACK_PARAM) {
|
if (top->type == STACK_PARAM) {
|
||||||
if (phpdbg_internal_stack_execute(top, allow_async_unsafe) == FAILURE) {
|
int result;
|
||||||
return FAILURE;
|
if ((result = phpdbg_internal_stack_execute(top, allow_async_unsafe)) != SUCCESS) {
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} while ((top = top->next));
|
} while ((top = top->next));
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -37,6 +37,25 @@ void phpdbg_init_lexer (phpdbg_param_t *stack, char *input) {
|
|||||||
LEX(len) = strlen(input);
|
LEX(len) = strlen(input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int unescape_string(char *s) {
|
||||||
|
switch (*s) {
|
||||||
|
case '\'':
|
||||||
|
case '\"': {
|
||||||
|
char start = *s;
|
||||||
|
size_t off = 1;
|
||||||
|
do {
|
||||||
|
if (s[off] == '\\') {
|
||||||
|
off++;
|
||||||
|
}
|
||||||
|
*s = s[off];
|
||||||
|
} while ((++s)[off] != start);
|
||||||
|
return off + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int phpdbg_lex (phpdbg_param_t* yylval) {
|
int phpdbg_lex (phpdbg_param_t* yylval) {
|
||||||
|
|
||||||
restart:
|
restart:
|
||||||
@ -60,10 +79,10 @@ T_RUN_SHORT "r"
|
|||||||
WS [ \r\t]+
|
WS [ \r\t]+
|
||||||
DIGITS [-]?[0-9\.]+
|
DIGITS [-]?[0-9\.]+
|
||||||
ID [^ \r\n\t:#\000]+
|
ID [^ \r\n\t:#\000]+
|
||||||
GENERIC_ID ([^ \r\n\t:#\000]|":\\")+
|
GENERIC_ID ([^ \r\n\t:#\000"']|":\\")+|["]([^\n\000"\\]|"\\\\"|"\\"["])+["]|[']([^\n\000'\\]|"\\\\"|"\\"['])+[']
|
||||||
ADDR [0][x][a-fA-F0-9]+
|
ADDR [0][x][a-fA-F0-9]+
|
||||||
OPCODE (ZEND_|zend_)([A-Za-z])+
|
OPCODE (ZEND_|zend_)([A-Za-z])+
|
||||||
INPUT [^\n\000#]+
|
INPUT ([^\n\000#"']|["]([^\n\000"\\]|"\\\\"|"\\"["])+["]|[']([^\n\000'\\]|"\\\\"|"\\"['])+['])+
|
||||||
|
|
||||||
<!*> := yyleng = (size_t) YYCURSOR - (size_t) yytext;
|
<!*> := yyleng = (size_t) YYCURSOR - (size_t) yytext;
|
||||||
|
|
||||||
@ -141,14 +160,14 @@ INPUT [^\n\000#]+
|
|||||||
|
|
||||||
<NORMAL>{GENERIC_ID} {
|
<NORMAL>{GENERIC_ID} {
|
||||||
phpdbg_init_param(yylval, STR_PARAM);
|
phpdbg_init_param(yylval, STR_PARAM);
|
||||||
yylval->str = estrndup(yytext, yyleng);
|
yylval->str = estrndup(yytext, yyleng - unescape_string(yytext));
|
||||||
yylval->len = yyleng;
|
yylval->len = yyleng;
|
||||||
return T_ID;
|
return T_ID;
|
||||||
}
|
}
|
||||||
|
|
||||||
<RAW>{INPUT} {
|
<RAW>{INPUT} {
|
||||||
phpdbg_init_param(yylval, STR_PARAM);
|
phpdbg_init_param(yylval, STR_PARAM);
|
||||||
yylval->str = estrndup(yytext, yyleng);
|
yylval->str = estrndup(yytext, yyleng - unescape_string(yytext));
|
||||||
yylval->len = yyleng;
|
yylval->len = yyleng;
|
||||||
return T_INPUT;
|
return T_INPUT;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user