Fix infinite lexer loop for :\ sequence in phpdbg

This commit is contained in:
Bob Weinand 2015-07-26 22:57:12 +02:00
parent 4cf9011c62
commit 70c6a6f624
2 changed files with 597 additions and 561 deletions

File diff suppressed because it is too large Load diff

View file

@ -60,6 +60,7 @@ T_RUN_SHORT "r"
WS [ \r\n\t]+ WS [ \r\n\t]+
DIGITS [-]?[0-9\.]+ DIGITS [-]?[0-9\.]+
ID [^ \r\n\t:#\000]+ ID [^ \r\n\t:#\000]+
GENERIC_ID ([^ \r\n\t:#\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]+
@ -70,7 +71,7 @@ INPUT [^\n\000]+
return 0; return 0;
} }
<PRE_RAW, NORMAL>[-][r]{WS}?{DIGITS} { <PRE_RAW, NORMAL>"-r"{WS}?{DIGITS} {
char *text = yytext + 2; char *text = yytext + 2;
while (*++text < '0'); while (*++text < '0');
yylval->num = atoi(text); yylval->num = atoi(text);
@ -83,21 +84,22 @@ INPUT [^\n\000]+
return T_IF; return T_IF;
} }
<NORMAL>{ID}[:]{1}[//]{2} { <NORMAL>"#" {
return T_POUND;
}
<NORMAL>"::" {
return T_DCOLON;
}
<NORMAL>":"/[^\\] {
return T_COLON;
}
<NORMAL>{ID}"://" {
phpdbg_init_param(yylval, STR_PARAM); phpdbg_init_param(yylval, STR_PARAM);
yylval->str = zend_strndup(yytext, yyleng); yylval->str = zend_strndup(yytext, yyleng);
yylval->len = yyleng; yylval->len = yyleng;
return T_PROTO; return T_PROTO;
} }
<NORMAL>[#]{1} {
return T_POUND;
}
<NORMAL>[:]{2} {
return T_DCOLON;
}
<NORMAL>[:]{1}/[^\\] {
return T_COLON;
}
<NORMAL>({T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE}){WS} { <NORMAL>({T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE}){WS} {
phpdbg_init_param(yylval, NUMERIC_PARAM); phpdbg_init_param(yylval, NUMERIC_PARAM);
@ -130,7 +132,7 @@ INPUT [^\n\000]+
return T_OPCODE; return T_OPCODE;
} }
<NORMAL>{ID} { <NORMAL>{GENERIC_ID} {
phpdbg_init_param(yylval, STR_PARAM); phpdbg_init_param(yylval, STR_PARAM);
yylval->str = zend_strndup(yytext, yyleng); yylval->str = zend_strndup(yytext, yyleng);
yylval->len = yyleng; yylval->len = yyleng;