MFB: Fixed bug #44609 (Dollar in ini variables are not parsed correctly)

This commit is contained in:
Scott MacVicar 2008-04-07 11:50:00 +00:00
parent b5cdc9ffee
commit c69476dbb5
2 changed files with 91 additions and 169 deletions

View File

@ -1,4 +1,4 @@
/* Generated by re2c 0.13.4.dev on Fri Apr 4 16:10:13 2008 */
/* Generated by re2c 0.13.4.dev on Mon Apr 7 12:50:51 2008 */
#line 1 "Zend/zend_ini_scanner.l"
/*
+----------------------------------------------------------------------+
@ -943,22 +943,13 @@ yy63:
yy64:
YYDEBUG(64, *YYCURSOR);
++YYCURSOR;
if ((yych = *YYCURSOR) <= 'Z') {
if (yych <= '/') {
if (yych >= 0x01) goto yy67;
} else {
if (yych <= '9') goto yy65;
if (yych <= '@') goto yy67;
}
if ((yych = *YYCURSOR) <= '\\') {
if (yych <= 0x00) goto yy65;
if (yych <= '[') goto yy67;
goto yy72;
} else {
if (yych <= '`') {
if (yych == '\\') goto yy72;
goto yy67;
} else {
if (yych <= 'z') goto yy65;
if (yych <= '{') goto yy78;
goto yy67;
}
if (yych == '{') goto yy78;
goto yy67;
}
yy65:
YYDEBUG(65, *YYCURSOR);
@ -967,7 +958,7 @@ yy65:
{
return 0;
}
#line 971 "Zend/zend_ini_scanner.c"
#line 962 "Zend/zend_ini_scanner.c"
yy66:
YYDEBUG(66, *YYCURSOR);
yych = *++YYCURSOR;
@ -994,21 +985,12 @@ yy70:
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych >= 0x01) goto yy67;
} else {
if (yych <= '9') goto yy71;
if (yych <= '@') goto yy67;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy71;
if (yych <= '[') goto yy67;
goto yy72;
} else {
if (yych <= '\\') {
if (yych <= '[') goto yy67;
goto yy72;
} else {
if (yych <= '`') goto yy67;
if (yych >= '|') goto yy67;
}
if (yych != '{') goto yy67;
}
yy71:
YYDEBUG(71, *YYCURSOR);
@ -1066,7 +1048,7 @@ yy78:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
#line 1070 "Zend/zend_ini_scanner.c"
#line 1052 "Zend/zend_ini_scanner.c"
yy80:
YYDEBUG(80, *YYCURSOR);
++YYCURSOR;
@ -1169,7 +1151,7 @@ yy85:
{ /* Get rest as section/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng);
}
#line 1173 "Zend/zend_ini_scanner.c"
#line 1155 "Zend/zend_ini_scanner.c"
yy86:
YYDEBUG(86, *YYCURSOR);
yyaccept = 0;
@ -1190,7 +1172,7 @@ yy88:
{
return 0;
}
#line 1194 "Zend/zend_ini_scanner.c"
#line 1176 "Zend/zend_ini_scanner.c"
yy89:
YYDEBUG(89, *YYCURSOR);
++YYCURSOR;
@ -1202,28 +1184,17 @@ yy90:
yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
return '"';
}
#line 1206 "Zend/zend_ini_scanner.c"
#line 1188 "Zend/zend_ini_scanner.c"
yy91:
YYDEBUG(91, *YYCURSOR);
yych = *++YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych <= 0x00) goto yy88;
goto yy102;
} else {
if (yych <= '9') goto yy88;
if (yych <= '@') goto yy102;
goto yy88;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy88;
if (yych <= '[') goto yy102;
goto yy107;
} else {
if (yych <= '`') {
if (yych == '\\') goto yy107;
goto yy102;
} else {
if (yych <= 'z') goto yy88;
if (yych <= '{') goto yy127;
goto yy102;
}
if (yych == '{') goto yy127;
goto yy102;
}
yy92:
YYDEBUG(92, *YYCURSOR);
@ -1279,7 +1250,7 @@ yy96:
{ /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
}
#line 1283 "Zend/zend_ini_scanner.c"
#line 1254 "Zend/zend_ini_scanner.c"
yy97:
YYDEBUG(97, *YYCURSOR);
yyaccept = 3;
@ -1309,7 +1280,7 @@ yy98:
{ /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
}
#line 1313 "Zend/zend_ini_scanner.c"
#line 1284 "Zend/zend_ini_scanner.c"
yy99:
YYDEBUG(99, *YYCURSOR);
yych = *++YYCURSOR;
@ -1325,7 +1296,7 @@ yy101:
BEGIN(INITIAL);
return ']';
}
#line 1329 "Zend/zend_ini_scanner.c"
#line 1300 "Zend/zend_ini_scanner.c"
yy102:
YYDEBUG(102, *YYCURSOR);
yyaccept = 0;
@ -1350,21 +1321,12 @@ yy105:
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych >= 0x01) goto yy102;
} else {
if (yych <= '9') goto yy106;
if (yych <= '@') goto yy102;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy106;
if (yych <= '[') goto yy102;
goto yy107;
} else {
if (yych <= '\\') {
if (yych <= '[') goto yy102;
goto yy107;
} else {
if (yych <= '`') goto yy102;
if (yych >= '|') goto yy102;
}
if (yych != '{') goto yy102;
}
yy106:
YYDEBUG(106, *YYCURSOR);
@ -1633,7 +1595,7 @@ yy123:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
#line 1637 "Zend/zend_ini_scanner.c"
#line 1599 "Zend/zend_ini_scanner.c"
yy127:
YYDEBUG(127, *YYCURSOR);
++YYCURSOR;
@ -1644,7 +1606,7 @@ yy127:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
#line 1648 "Zend/zend_ini_scanner.c"
#line 1610 "Zend/zend_ini_scanner.c"
yy129:
YYDEBUG(129, *YYCURSOR);
yyaccept = 0;
@ -1761,7 +1723,7 @@ yy136:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
#line 1765 "Zend/zend_ini_scanner.c"
#line 1727 "Zend/zend_ini_scanner.c"
yy137:
YYDEBUG(137, *YYCURSOR);
yyaccept = 0;
@ -1789,7 +1751,7 @@ yy139:
SCNG(lineno)++;
return END_OF_LINE;
}
#line 1793 "Zend/zend_ini_scanner.c"
#line 1755 "Zend/zend_ini_scanner.c"
yy140:
YYDEBUG(140, *YYCURSOR);
yych = *++YYCURSOR;
@ -1806,9 +1768,9 @@ yy142:
#line 490 "Zend/zend_ini_scanner.l"
{ /* End of option value (if EOF is reached before EOL) */
BEGIN(INITIAL);
return 0;
return END_OF_LINE;
}
#line 1812 "Zend/zend_ini_scanner.c"
#line 1774 "Zend/zend_ini_scanner.c"
yy143:
YYDEBUG(143, *YYCURSOR);
yych = *++YYCURSOR;
@ -1836,7 +1798,7 @@ yy147:
SCNG(lineno)++;
return END_OF_LINE;
}
#line 1840 "Zend/zend_ini_scanner.c"
#line 1802 "Zend/zend_ini_scanner.c"
yy148:
YYDEBUG(148, *YYCURSOR);
yych = *++YYCURSOR;
@ -1942,7 +1904,7 @@ yy158:
{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
#line 1946 "Zend/zend_ini_scanner.c"
#line 1908 "Zend/zend_ini_scanner.c"
yy159:
YYDEBUG(159, *YYCURSOR);
++YYCURSOR;
@ -1952,7 +1914,7 @@ yy159:
{
return 0;
}
#line 1956 "Zend/zend_ini_scanner.c"
#line 1918 "Zend/zend_ini_scanner.c"
yy161:
YYDEBUG(161, *YYCURSOR);
++YYCURSOR;
@ -1967,7 +1929,7 @@ yy162:
SCNG(lineno)++;
return ']';
}
#line 1971 "Zend/zend_ini_scanner.c"
#line 1933 "Zend/zend_ini_scanner.c"
yy163:
YYDEBUG(163, *YYCURSOR);
++YYCURSOR;
@ -2092,7 +2054,7 @@ yy172:
{ /* Get rest as section/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng);
}
#line 2096 "Zend/zend_ini_scanner.c"
#line 2058 "Zend/zend_ini_scanner.c"
yy173:
YYDEBUG(173, *YYCURSOR);
yyaccept = 0;
@ -2115,7 +2077,7 @@ yy175:
{
return 0;
}
#line 2119 "Zend/zend_ini_scanner.c"
#line 2081 "Zend/zend_ini_scanner.c"
yy176:
YYDEBUG(176, *YYCURSOR);
++YYCURSOR;
@ -2127,28 +2089,17 @@ yy177:
yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
return '"';
}
#line 2131 "Zend/zend_ini_scanner.c"
#line 2093 "Zend/zend_ini_scanner.c"
yy178:
YYDEBUG(178, *YYCURSOR);
yych = *++YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych <= 0x00) goto yy175;
goto yy193;
} else {
if (yych <= '9') goto yy175;
if (yych <= '@') goto yy193;
goto yy175;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy175;
if (yych <= '[') goto yy193;
goto yy198;
} else {
if (yych <= '`') {
if (yych == '\\') goto yy198;
goto yy193;
} else {
if (yych <= 'z') goto yy175;
if (yych <= '{') goto yy218;
goto yy193;
}
if (yych == '{') goto yy218;
goto yy193;
}
yy179:
YYDEBUG(179, *YYCURSOR);
@ -2204,7 +2155,7 @@ yy183:
{ /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
}
#line 2208 "Zend/zend_ini_scanner.c"
#line 2159 "Zend/zend_ini_scanner.c"
yy184:
YYDEBUG(184, *YYCURSOR);
yyaccept = 3;
@ -2234,7 +2185,7 @@ yy185:
{ /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
}
#line 2238 "Zend/zend_ini_scanner.c"
#line 2189 "Zend/zend_ini_scanner.c"
yy186:
YYDEBUG(186, *YYCURSOR);
yych = *++YYCURSOR;
@ -2253,7 +2204,7 @@ yy188:
SCNG(lineno)++;
return ']';
}
#line 2257 "Zend/zend_ini_scanner.c"
#line 2208 "Zend/zend_ini_scanner.c"
yy189:
YYDEBUG(189, *YYCURSOR);
++YYCURSOR;
@ -2300,21 +2251,12 @@ yy196:
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych >= 0x01) goto yy193;
} else {
if (yych <= '9') goto yy197;
if (yych <= '@') goto yy193;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy197;
if (yych <= '[') goto yy193;
goto yy198;
} else {
if (yych <= '\\') {
if (yych <= '[') goto yy193;
goto yy198;
} else {
if (yych <= '`') goto yy193;
if (yych >= '|') goto yy193;
}
if (yych != '{') goto yy193;
}
yy197:
YYDEBUG(197, *YYCURSOR);
@ -2583,7 +2525,7 @@ yy214:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
#line 2587 "Zend/zend_ini_scanner.c"
#line 2529 "Zend/zend_ini_scanner.c"
yy218:
YYDEBUG(218, *YYCURSOR);
++YYCURSOR;
@ -2594,7 +2536,7 @@ yy218:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
#line 2598 "Zend/zend_ini_scanner.c"
#line 2540 "Zend/zend_ini_scanner.c"
yy220:
YYDEBUG(220, *YYCURSOR);
yyaccept = 0;
@ -2776,9 +2718,9 @@ yy226:
#line 490 "Zend/zend_ini_scanner.l"
{ /* End of option value (if EOF is reached before EOL) */
BEGIN(INITIAL);
return 0;
return END_OF_LINE;
}
#line 2782 "Zend/zend_ini_scanner.c"
#line 2724 "Zend/zend_ini_scanner.c"
yy227:
YYDEBUG(227, *YYCURSOR);
yyaccept = 0;
@ -2791,7 +2733,7 @@ yy228:
{ /* Get everything else as option/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng);
}
#line 2795 "Zend/zend_ini_scanner.c"
#line 2737 "Zend/zend_ini_scanner.c"
yy229:
YYDEBUG(229, *YYCURSOR);
yyaccept = 1;
@ -2804,7 +2746,7 @@ yy230:
{
RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
}
#line 2808 "Zend/zend_ini_scanner.c"
#line 2750 "Zend/zend_ini_scanner.c"
yy231:
YYDEBUG(231, *YYCURSOR);
++YYCURSOR;
@ -2817,7 +2759,7 @@ yy232:
SCNG(lineno)++;
return END_OF_LINE;
}
#line 2821 "Zend/zend_ini_scanner.c"
#line 2763 "Zend/zend_ini_scanner.c"
yy233:
YYDEBUG(233, *YYCURSOR);
yych = *++YYCURSOR;
@ -2835,7 +2777,7 @@ yy235:
{ /* Boolean operators */
return yytext[0];
}
#line 2839 "Zend/zend_ini_scanner.c"
#line 2781 "Zend/zend_ini_scanner.c"
yy236:
YYDEBUG(236, *YYCURSOR);
++YYCURSOR;
@ -2847,28 +2789,17 @@ yy237:
yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
return '"';
}
#line 2851 "Zend/zend_ini_scanner.c"
#line 2793 "Zend/zend_ini_scanner.c"
yy238:
YYDEBUG(238, *YYCURSOR);
yych = *++YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych <= 0x00) goto yy226;
goto yy254;
} else {
if (yych <= '9') goto yy226;
if (yych <= '@') goto yy254;
goto yy226;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy226;
if (yych <= '[') goto yy254;
goto yy261;
} else {
if (yych <= '`') {
if (yych == '\\') goto yy261;
goto yy254;
} else {
if (yych <= 'z') goto yy226;
if (yych <= '{') goto yy299;
goto yy254;
}
if (yych == '{') goto yy299;
goto yy254;
}
yy239:
YYDEBUG(239, *YYCURSOR);
@ -2938,7 +2869,7 @@ yy243:
{ /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
}
#line 2942 "Zend/zend_ini_scanner.c"
#line 2873 "Zend/zend_ini_scanner.c"
yy244:
YYDEBUG(244, *YYCURSOR);
yyaccept = 2;
@ -2955,7 +2886,7 @@ yy245:
BEGIN(INITIAL);
return END_OF_LINE;
}
#line 2959 "Zend/zend_ini_scanner.c"
#line 2890 "Zend/zend_ini_scanner.c"
yy247:
YYDEBUG(247, *YYCURSOR);
yyaccept = 4;
@ -2995,7 +2926,7 @@ yy248:
{ /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
}
#line 2999 "Zend/zend_ini_scanner.c"
#line 2930 "Zend/zend_ini_scanner.c"
yy249:
YYDEBUG(249, *YYCURSOR);
yyaccept = 4;
@ -3383,21 +3314,12 @@ yy259:
++YYCURSOR;
YYFILL(1);
yych = *YYCURSOR;
if (yych <= 'Z') {
if (yych <= '/') {
if (yych >= 0x01) goto yy254;
} else {
if (yych <= '9') goto yy260;
if (yych <= '@') goto yy254;
}
if (yych <= '\\') {
if (yych <= 0x00) goto yy260;
if (yych <= '[') goto yy254;
goto yy261;
} else {
if (yych <= '\\') {
if (yych <= '[') goto yy254;
goto yy261;
} else {
if (yych <= '`') goto yy254;
if (yych >= '|') goto yy254;
}
if (yych != '{') goto yy254;
}
yy260:
YYDEBUG(260, *YYCURSOR);
@ -3500,7 +3422,7 @@ yy265:
{ /* TRUE value (when used outside option value/offset this causes parse error!) */
RETURN_TOKEN(BOOL_TRUE, "1", 1);
}
#line 3504 "Zend/zend_ini_scanner.c"
#line 3426 "Zend/zend_ini_scanner.c"
yy266:
YYDEBUG(266, *YYCURSOR);
++YYCURSOR;
@ -3704,7 +3626,7 @@ yy272:
{ /* FALSE value (when used outside option value/offset this causes parse error!)*/
RETURN_TOKEN(BOOL_FALSE, "", 0);
}
#line 3708 "Zend/zend_ini_scanner.c"
#line 3630 "Zend/zend_ini_scanner.c"
yy273:
YYDEBUG(273, *YYCURSOR);
++YYCURSOR;
@ -4086,7 +4008,7 @@ yy285:
SCNG(lineno)++;
return END_OF_LINE;
}
#line 4090 "Zend/zend_ini_scanner.c"
#line 4012 "Zend/zend_ini_scanner.c"
yy286:
YYDEBUG(286, *YYCURSOR);
yych = *++YYCURSOR;
@ -4307,7 +4229,7 @@ yy295:
}
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}
#line 4311 "Zend/zend_ini_scanner.c"
#line 4233 "Zend/zend_ini_scanner.c"
yy299:
YYDEBUG(299, *YYCURSOR);
++YYCURSOR;
@ -4318,7 +4240,7 @@ yy299:
yy_push_state(ST_VARNAME TSRMLS_CC);
return TC_DOLLAR_CURLY;
}
#line 4322 "Zend/zend_ini_scanner.c"
#line 4244 "Zend/zend_ini_scanner.c"
yy301:
YYDEBUG(301, *YYCURSOR);
++YYCURSOR;
@ -4428,7 +4350,7 @@ yy310:
{
return 0;
}
#line 4432 "Zend/zend_ini_scanner.c"
#line 4354 "Zend/zend_ini_scanner.c"
yy312:
YYDEBUG(312, *YYCURSOR);
++YYCURSOR;
@ -4441,7 +4363,7 @@ yy313:
{ /* Variable name */
RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
}
#line 4445 "Zend/zend_ini_scanner.c"
#line 4367 "Zend/zend_ini_scanner.c"
yy314:
YYDEBUG(314, *YYCURSOR);
++YYCURSOR;
@ -4452,7 +4374,7 @@ yy314:
yy_pop_state(TSRMLS_C);
return '}';
}
#line 4456 "Zend/zend_ini_scanner.c"
#line 4378 "Zend/zend_ini_scanner.c"
yy316:
YYDEBUG(316, *YYCURSOR);
++YYCURSOR;

View File

@ -320,7 +320,7 @@ SINGLE_QUOTED_CHARS [^']
RAW_VALUE_CHARS [^=\n\r;]
/* Allow using ${foobar} in sections, quoted strings and values */
LITERAL_DOLLAR ("$"([^a-zA-Z0-9{\000]|("\\"{ANY_CHAR})))
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
@ -489,7 +489,7 @@ DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
<ST_VALUE,ST_RAW>[^] { /* End of option value (if EOF is reached before EOL) */
BEGIN(INITIAL);
return 0;
return END_OF_LINE;
}
<*>[^] {