mirror of
https://github.com/php/php-src.git
synced 2025-08-21 01:45:16 +02:00
MF5: Fix BC issue with ini scanner.
# Now in "": \LETTER is literal, \" is escaped ", value ending with \" is literal
This commit is contained in:
parent
79d8631fea
commit
0eafa6b080
1 changed files with 7 additions and 14 deletions
|
@ -244,21 +244,10 @@ static void zend_ini_escape_string(zval *lval, char *str, int len, char quote_ty
|
||||||
if (*s == '\\') {
|
if (*s == '\\') {
|
||||||
s++;
|
s++;
|
||||||
if (s >= end) {
|
if (s >= end) {
|
||||||
|
*t++ = '\\';
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
switch (*s) {
|
switch (*s) {
|
||||||
case 'n':
|
|
||||||
*t++ = '\n';
|
|
||||||
Z_STRLEN_P(lval)--;
|
|
||||||
break;
|
|
||||||
case 'r':
|
|
||||||
*t++ = '\r';
|
|
||||||
Z_STRLEN_P(lval)--;
|
|
||||||
break;
|
|
||||||
case 't':
|
|
||||||
*t++ = '\t';
|
|
||||||
Z_STRLEN_P(lval)--;
|
|
||||||
break;
|
|
||||||
case '"':
|
case '"':
|
||||||
if (*s != quote_type) {
|
if (*s != quote_type) {
|
||||||
*t++ = '\\';
|
*t++ = '\\';
|
||||||
|
@ -325,7 +314,7 @@ RAW_VALUE_CHARS [^=\n\r;]
|
||||||
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
|
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
|
||||||
VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
|
VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
|
||||||
SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
|
SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
|
||||||
DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
|
DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"[^"])|{LITERAL_DOLLAR}|"\\"["][^\r\n])
|
||||||
|
|
||||||
+<!*> := yyleng = YYCURSOR - SCNG(yy_text);
|
+<!*> := yyleng = YYCURSOR - SCNG(yy_text);
|
||||||
|
|
||||||
|
@ -458,7 +447,11 @@ DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
|
||||||
return '"';
|
return '"';
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_DOUBLE_QUOTES>{DOUBLE_QUOTES_CHARS}+ { /* Escape double quoted string contents */
|
<ST_DOUBLE_QUOTES>{DOUBLE_QUOTES_CHARS}+("\\"["])? { /* Escape double quoted string contents */
|
||||||
|
if(yyleng > 1 && yytext[yyleng-1] == '"' && yytext[yyleng-2] == '\\') {
|
||||||
|
yyless(yyleng-1);
|
||||||
|
yyleng--;
|
||||||
|
}
|
||||||
zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC);
|
zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC);
|
||||||
return TC_QUOTED_STRING;
|
return TC_QUOTED_STRING;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue