MF5: Fix BC issue with ini scanner.

# Now in "": \LETTER is literal, \" is escaped ", value ending with \" is literal
This commit is contained in:
Stanislav Malyshev 2008-09-11 00:49:18 +00:00
parent 79d8631fea
commit 0eafa6b080

View file

@ -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;
} }