Browse Source

Fixed bug #76965 INI_SCANNER_RAW doesn't strip trailing whitespace

pull/3587/head
Pierrick Charron 8 years ago
parent
commit
f42d7bddc0
  1. 4
      NEWS
  2. 36
      Zend/tests/bug76965.phpt
  3. 161
      Zend/zend_ini_scanner.c
  4. 25
      Zend/zend_ini_scanner.l

4
NEWS

@ -22,6 +22,10 @@ PHP NEWS
- intl: - intl:
. Fixed bug #76942 (U_ARGUMENT_TYPE_MISMATCH). (anthrax at unixuser dot org) . Fixed bug #76942 (U_ARGUMENT_TYPE_MISMATCH). (anthrax at unixuser dot org)
- Standard:
. Fixed bug #76965 (INI_SCANNER_RAW doesn't strip trailing whitespace).
(Pierrick)
11 Oct 2018, PHP 7.1.23 11 Oct 2018, PHP 7.1.23
- Core: - Core:

36
Zend/tests/bug76965.phpt

@ -0,0 +1,36 @@
--TEST--
Bug #76965 (INI_SCANNER_RAW doesn't strip trailing whitespace)
--FILE--
<?php
// the trailing whitespace is intentional
$ini = <<<END
1="foo"
2="bar" ; comment
3= baz
4= "foo;bar"
5= "foo" ; bar ; baz
6= "foo;bar" ; baz
7= foo"bar ; "ok
END;
var_dump(parse_ini_string($ini, false, INI_SCANNER_RAW));
?>
===DONE===
--EXPECT--
array(7) {
[1]=>
string(3) "foo"
[2]=>
string(3) "bar"
[3]=>
string(3) "baz"
[4]=>
string(7) "foo;bar"
[5]=>
string(3) "foo"
[6]=>
string(7) "foo;bar"
[7]=>
string(7) "foo"bar"
}
===DONE===

161
Zend/zend_ini_scanner.c

@ -539,7 +539,7 @@ yy6:
yy8: yy8:
YYDEBUG(8, *YYCURSOR); YYDEBUG(8, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 629 "Zend/zend_ini_scanner.l"
#line 636 "Zend/zend_ini_scanner.l"
{ {
/* eat whitespace */ /* eat whitespace */
goto restart; goto restart;
@ -551,7 +551,7 @@ yy9:
yy10: yy10:
YYDEBUG(10, *YYCURSOR); YYDEBUG(10, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 634 "Zend/zend_ini_scanner.l"
#line 641 "Zend/zend_ini_scanner.l"
{ {
SCNG(lineno)++; SCNG(lineno)++;
return END_OF_LINE; return END_OF_LINE;
@ -617,7 +617,7 @@ yy14:
++YYCURSOR; ++YYCURSOR;
YYDEBUG(15, *YYCURSOR); YYDEBUG(15, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 557 "Zend/zend_ini_scanner.l"
#line 564 "Zend/zend_ini_scanner.l"
{ /* Disallow these chars outside option values */ { /* Disallow these chars outside option values */
return yytext[0]; return yytext[0];
} }
@ -629,7 +629,7 @@ yy16:
goto yy32; goto yy32;
YYDEBUG(17, *YYCURSOR); YYDEBUG(17, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 650 "Zend/zend_ini_scanner.l"
#line 657 "Zend/zend_ini_scanner.l"
{ {
return 0; return 0;
} }
@ -761,7 +761,7 @@ yy33:
yy34: yy34:
YYDEBUG(34, *YYCURSOR); YYDEBUG(34, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 639 "Zend/zend_ini_scanner.l"
#line 646 "Zend/zend_ini_scanner.l"
{ /* Comment */ { /* Comment */
BEGIN(INITIAL); BEGIN(INITIAL);
SCNG(lineno)++; SCNG(lineno)++;
@ -1096,7 +1096,7 @@ yyc_ST_DOUBLE_QUOTES:
yy64: yy64:
YYDEBUG(64, *YYCURSOR); YYDEBUG(64, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 589 "Zend/zend_ini_scanner.l"
#line 596 "Zend/zend_ini_scanner.l"
{ /* Escape double quoted string contents */ { /* Escape double quoted string contents */
if (YYCURSOR > YYLIMIT) { if (YYCURSOR > YYLIMIT) {
return 0; return 0;
@ -1144,7 +1144,7 @@ yy65:
} }
YYDEBUG(67, *YYCURSOR); YYDEBUG(67, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 584 "Zend/zend_ini_scanner.l"
#line 591 "Zend/zend_ini_scanner.l"
{ /* Double quoted '"' string ends */ { /* Double quoted '"' string ends */
yy_pop_state(); yy_pop_state();
return '"'; return '"';
@ -1263,7 +1263,7 @@ yy74:
yy75: yy75:
YYDEBUG(75, *YYCURSOR); YYDEBUG(75, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 575 "Zend/zend_ini_scanner.l"
#line 582 "Zend/zend_ini_scanner.l"
{ /* Get rest as section/offset value */ { /* Get rest as section/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng); RETURN_TOKEN(TC_STRING, yytext, yyleng);
} }
@ -1307,7 +1307,7 @@ yy78:
yy79: yy79:
YYDEBUG(79, *YYCURSOR); YYDEBUG(79, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 650 "Zend/zend_ini_scanner.l"
#line 657 "Zend/zend_ini_scanner.l"
{ {
return 0; return 0;
} }
@ -1317,7 +1317,7 @@ yy80:
++YYCURSOR; ++YYCURSOR;
YYDEBUG(81, *YYCURSOR); YYDEBUG(81, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 579 "Zend/zend_ini_scanner.l"
#line 586 "Zend/zend_ini_scanner.l"
{ /* Double quoted '"' string start */ { /* Double quoted '"' string start */
yy_push_state(ST_DOUBLE_QUOTES); yy_push_state(ST_DOUBLE_QUOTES);
return '"'; return '"';
@ -1388,7 +1388,7 @@ yy85:
yy87: yy87:
YYDEBUG(87, *YYCURSOR); YYDEBUG(87, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 553 "Zend/zend_ini_scanner.l"
#line 560 "Zend/zend_ini_scanner.l"
{ /* Get number option value as string */ { /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng); RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
} }
@ -1425,7 +1425,7 @@ yy88:
yy90: yy90:
YYDEBUG(90, *YYCURSOR); YYDEBUG(90, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 549 "Zend/zend_ini_scanner.l"
#line 556 "Zend/zend_ini_scanner.l"
{ /* Get constant option value */ { /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
} }
@ -1626,7 +1626,7 @@ yyc_ST_RAW:
++YYCURSOR; ++YYCURSOR;
YYDEBUG(110, *YYCURSOR); YYDEBUG(110, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 645 "Zend/zend_ini_scanner.l"
#line 652 "Zend/zend_ini_scanner.l"
{ /* End of option value (if EOF is reached before EOL */ { /* End of option value (if EOF is reached before EOL */
BEGIN(INITIAL); BEGIN(INITIAL);
return END_OF_LINE; return END_OF_LINE;
@ -1641,6 +1641,7 @@ yy112:
#line 502 "Zend/zend_ini_scanner.l" #line 502 "Zend/zend_ini_scanner.l"
{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
unsigned char *sc = NULL; unsigned char *sc = NULL;
EAT_LEADING_WHITESPACE();
while (YYCURSOR < YYLIMIT) { while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR) { switch (*YYCURSOR) {
case '\n': case '\n':
@ -1651,31 +1652,37 @@ yy112:
if (sc == NULL) { if (sc == NULL) {
sc = YYCURSOR; sc = YYCURSOR;
} }
/* no break */
YYCURSOR++;
break;
case '"':
if (yytext[0] == '"') {
sc = NULL;
}
YYCURSOR++;
break;
default: default:
YYCURSOR++; YYCURSOR++;
break; break;
} }
} }
end_raw_value_chars: end_raw_value_chars:
yyleng = YYCURSOR - SCNG(yy_text);
/* Eat trailing semicolons */
while (yytext[yyleng - 1] == ';') {
yyleng--;
if (sc) {
yyleng = sc - SCNG(yy_text);
} else {
yyleng = YYCURSOR - SCNG(yy_text);
} }
EAT_TRAILING_WHITESPACE();
/* Eat leading and trailing double quotes */ /* Eat leading and trailing double quotes */
if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') { if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') {
SCNG(yy_text)++; SCNG(yy_text)++;
yyleng = yyleng - 2; yyleng = yyleng - 2;
} else if (sc) {
YYCURSOR = sc;
yyleng = YYCURSOR - SCNG(yy_text);
} }
RETURN_TOKEN(TC_RAW, yytext, yyleng); RETURN_TOKEN(TC_RAW, yytext, yyleng);
} }
#line 1679 "Zend/zend_ini_scanner.c"
#line 1686 "Zend/zend_ini_scanner.c"
yy113: yy113:
YYDEBUG(113, *YYCURSOR); YYDEBUG(113, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -1699,13 +1706,13 @@ yy114:
yy115: yy115:
YYDEBUG(115, *YYCURSOR); YYDEBUG(115, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 543 "Zend/zend_ini_scanner.l"
#line 550 "Zend/zend_ini_scanner.l"
{ /* End of option value */ { /* End of option value */
BEGIN(INITIAL); BEGIN(INITIAL);
SCNG(lineno)++; SCNG(lineno)++;
return END_OF_LINE; return END_OF_LINE;
} }
#line 1709 "Zend/zend_ini_scanner.c"
#line 1716 "Zend/zend_ini_scanner.c"
yy116: yy116:
YYDEBUG(116, *YYCURSOR); YYDEBUG(116, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -1735,12 +1742,12 @@ yy119:
yy120: yy120:
YYDEBUG(120, *YYCURSOR); YYDEBUG(120, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 629 "Zend/zend_ini_scanner.l"
#line 636 "Zend/zend_ini_scanner.l"
{ {
/* eat whitespace */ /* eat whitespace */
goto restart; goto restart;
} }
#line 1744 "Zend/zend_ini_scanner.c"
#line 1751 "Zend/zend_ini_scanner.c"
yy121: yy121:
YYDEBUG(121, *YYCURSOR); YYDEBUG(121, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -1758,13 +1765,13 @@ yy123:
yy124: yy124:
YYDEBUG(124, *YYCURSOR); YYDEBUG(124, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 639 "Zend/zend_ini_scanner.l"
#line 646 "Zend/zend_ini_scanner.l"
{ /* Comment */ { /* Comment */
BEGIN(INITIAL); BEGIN(INITIAL);
SCNG(lineno)++; SCNG(lineno)++;
return END_OF_LINE; return END_OF_LINE;
} }
#line 1768 "Zend/zend_ini_scanner.c"
#line 1775 "Zend/zend_ini_scanner.c"
yy125: yy125:
YYDEBUG(125, *YYCURSOR); YYDEBUG(125, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -1827,21 +1834,21 @@ yy128:
} }
YYDEBUG(130, *YYCURSOR); YYDEBUG(130, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 539 "Zend/zend_ini_scanner.l"
#line 546 "Zend/zend_ini_scanner.l"
{ /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
RETURN_TOKEN(TC_RAW, yytext, yyleng); RETURN_TOKEN(TC_RAW, yytext, yyleng);
} }
#line 1835 "Zend/zend_ini_scanner.c"
#line 1842 "Zend/zend_ini_scanner.c"
yy131: yy131:
YYDEBUG(131, *YYCURSOR); YYDEBUG(131, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
YYDEBUG(132, *YYCURSOR); YYDEBUG(132, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 650 "Zend/zend_ini_scanner.l"
#line 657 "Zend/zend_ini_scanner.l"
{ {
return 0; return 0;
} }
#line 1845 "Zend/zend_ini_scanner.c"
#line 1852 "Zend/zend_ini_scanner.c"
yy133: yy133:
YYDEBUG(133, *YYCURSOR); YYDEBUG(133, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -1863,7 +1870,7 @@ yy135:
SCNG(lineno)++; SCNG(lineno)++;
return ']'; return ']';
} }
#line 1867 "Zend/zend_ini_scanner.c"
#line 1874 "Zend/zend_ini_scanner.c"
yy136: yy136:
YYDEBUG(136, *YYCURSOR); YYDEBUG(136, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -1972,11 +1979,11 @@ yy141:
yy142: yy142:
YYDEBUG(142, *YYCURSOR); YYDEBUG(142, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 575 "Zend/zend_ini_scanner.l"
#line 582 "Zend/zend_ini_scanner.l"
{ /* Get rest as section/offset value */ { /* Get rest as section/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng); RETURN_TOKEN(TC_STRING, yytext, yyleng);
} }
#line 1980 "Zend/zend_ini_scanner.c"
#line 1987 "Zend/zend_ini_scanner.c"
yy143: yy143:
YYDEBUG(143, *YYCURSOR); YYDEBUG(143, *YYCURSOR);
yyaccept = 0; yyaccept = 0;
@ -2016,22 +2023,22 @@ yy145:
yy146: yy146:
YYDEBUG(146, *YYCURSOR); YYDEBUG(146, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 650 "Zend/zend_ini_scanner.l"
#line 657 "Zend/zend_ini_scanner.l"
{ {
return 0; return 0;
} }
#line 2024 "Zend/zend_ini_scanner.c"
#line 2031 "Zend/zend_ini_scanner.c"
yy147: yy147:
YYDEBUG(147, *YYCURSOR); YYDEBUG(147, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
YYDEBUG(148, *YYCURSOR); YYDEBUG(148, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 579 "Zend/zend_ini_scanner.l"
#line 586 "Zend/zend_ini_scanner.l"
{ /* Double quoted '"' string start */ { /* Double quoted '"' string start */
yy_push_state(ST_DOUBLE_QUOTES); yy_push_state(ST_DOUBLE_QUOTES);
return '"'; return '"';
} }
#line 2035 "Zend/zend_ini_scanner.c"
#line 2042 "Zend/zend_ini_scanner.c"
yy149: yy149:
YYDEBUG(149, *YYCURSOR); YYDEBUG(149, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -2097,11 +2104,11 @@ yy152:
yy154: yy154:
YYDEBUG(154, *YYCURSOR); YYDEBUG(154, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 553 "Zend/zend_ini_scanner.l"
#line 560 "Zend/zend_ini_scanner.l"
{ /* Get number option value as string */ { /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng); RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
} }
#line 2105 "Zend/zend_ini_scanner.c"
#line 2112 "Zend/zend_ini_scanner.c"
yy155: yy155:
YYDEBUG(155, *YYCURSOR); YYDEBUG(155, *YYCURSOR);
yyaccept = 3; yyaccept = 3;
@ -2134,11 +2141,11 @@ yy155:
yy157: yy157:
YYDEBUG(157, *YYCURSOR); YYDEBUG(157, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 549 "Zend/zend_ini_scanner.l"
#line 556 "Zend/zend_ini_scanner.l"
{ /* Get constant option value */ { /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
} }
#line 2142 "Zend/zend_ini_scanner.c"
#line 2149 "Zend/zend_ini_scanner.c"
yy158: yy158:
YYDEBUG(158, *YYCURSOR); YYDEBUG(158, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -2166,7 +2173,7 @@ yy161:
SCNG(lineno)++; SCNG(lineno)++;
return ']'; return ']';
} }
#line 2170 "Zend/zend_ini_scanner.c"
#line 2177 "Zend/zend_ini_scanner.c"
yy162: yy162:
YYDEBUG(162, *YYCURSOR); YYDEBUG(162, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -2221,7 +2228,7 @@ yy167:
yy_push_state(ST_VARNAME); yy_push_state(ST_VARNAME);
return TC_DOLLAR_CURLY; return TC_DOLLAR_CURLY;
} }
#line 2225 "Zend/zend_ini_scanner.c"
#line 2232 "Zend/zend_ini_scanner.c"
yy169: yy169:
YYDEBUG(169, *YYCURSOR); YYDEBUG(169, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -2293,7 +2300,7 @@ yy175:
} }
RETURN_TOKEN(TC_RAW, yytext, yyleng); RETURN_TOKEN(TC_RAW, yytext, yyleng);
} }
#line 2297 "Zend/zend_ini_scanner.c"
#line 2304 "Zend/zend_ini_scanner.c"
} }
/* *********************************** */ /* *********************************** */
yyc_ST_VALUE: yyc_ST_VALUE:
@ -2429,12 +2436,12 @@ yy179:
yy180: yy180:
YYDEBUG(180, *YYCURSOR); YYDEBUG(180, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 645 "Zend/zend_ini_scanner.l"
#line 652 "Zend/zend_ini_scanner.l"
{ /* End of option value (if EOF is reached before EOL */ { /* End of option value (if EOF is reached before EOL */
BEGIN(INITIAL); BEGIN(INITIAL);
return END_OF_LINE; return END_OF_LINE;
} }
#line 2438 "Zend/zend_ini_scanner.c"
#line 2445 "Zend/zend_ini_scanner.c"
yy181: yy181:
YYDEBUG(181, *YYCURSOR); YYDEBUG(181, *YYCURSOR);
yyaccept = 0; yyaccept = 0;
@ -2451,11 +2458,11 @@ yy182:
yy183: yy183:
YYDEBUG(183, *YYCURSOR); YYDEBUG(183, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 571 "Zend/zend_ini_scanner.l"
#line 578 "Zend/zend_ini_scanner.l"
{ /* Get everything else as option/offset value */ { /* Get everything else as option/offset value */
RETURN_TOKEN(TC_STRING, yytext, yyleng); RETURN_TOKEN(TC_STRING, yytext, yyleng);
} }
#line 2459 "Zend/zend_ini_scanner.c"
#line 2466 "Zend/zend_ini_scanner.c"
yy184: yy184:
YYDEBUG(184, *YYCURSOR); YYDEBUG(184, *YYCURSOR);
yyaccept = 1; yyaccept = 1;
@ -2480,24 +2487,24 @@ yy184:
yy186: yy186:
YYDEBUG(186, *YYCURSOR); YYDEBUG(186, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 625 "Zend/zend_ini_scanner.l"
#line 632 "Zend/zend_ini_scanner.l"
{ {
RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng); RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
} }
#line 2488 "Zend/zend_ini_scanner.c"
#line 2495 "Zend/zend_ini_scanner.c"
yy187: yy187:
YYDEBUG(187, *YYCURSOR); YYDEBUG(187, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
yy188: yy188:
YYDEBUG(188, *YYCURSOR); YYDEBUG(188, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 543 "Zend/zend_ini_scanner.l"
#line 550 "Zend/zend_ini_scanner.l"
{ /* End of option value */ { /* End of option value */
BEGIN(INITIAL); BEGIN(INITIAL);
SCNG(lineno)++; SCNG(lineno)++;
return END_OF_LINE; return END_OF_LINE;
} }
#line 2501 "Zend/zend_ini_scanner.c"
#line 2508 "Zend/zend_ini_scanner.c"
yy189: yy189:
YYDEBUG(189, *YYCURSOR); YYDEBUG(189, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -2513,22 +2520,22 @@ yy190:
if (yych == ' ') goto yy190; if (yych == ' ') goto yy190;
YYDEBUG(192, *YYCURSOR); YYDEBUG(192, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 561 "Zend/zend_ini_scanner.l"
#line 568 "Zend/zend_ini_scanner.l"
{ /* Boolean operators */ { /* Boolean operators */
return yytext[0]; return yytext[0];
} }
#line 2521 "Zend/zend_ini_scanner.c"
#line 2528 "Zend/zend_ini_scanner.c"
yy193: yy193:
YYDEBUG(193, *YYCURSOR); YYDEBUG(193, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
YYDEBUG(194, *YYCURSOR); YYDEBUG(194, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 579 "Zend/zend_ini_scanner.l"
#line 586 "Zend/zend_ini_scanner.l"
{ /* Double quoted '"' string start */ { /* Double quoted '"' string start */
yy_push_state(ST_DOUBLE_QUOTES); yy_push_state(ST_DOUBLE_QUOTES);
return '"'; return '"';
} }
#line 2532 "Zend/zend_ini_scanner.c"
#line 2539 "Zend/zend_ini_scanner.c"
yy195: yy195:
YYDEBUG(195, *YYCURSOR); YYDEBUG(195, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -2603,11 +2610,11 @@ yy198:
yy200: yy200:
YYDEBUG(200, *YYCURSOR); YYDEBUG(200, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 553 "Zend/zend_ini_scanner.l"
#line 560 "Zend/zend_ini_scanner.l"
{ /* Get number option value as string */ { /* Get number option value as string */
RETURN_TOKEN(TC_NUMBER, yytext, yyleng); RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
} }
#line 2611 "Zend/zend_ini_scanner.c"
#line 2618 "Zend/zend_ini_scanner.c"
yy201: yy201:
YYDEBUG(201, *YYCURSOR); YYDEBUG(201, *YYCURSOR);
yyaccept = 2; yyaccept = 2;
@ -2618,13 +2625,13 @@ yy202:
++YYCURSOR; ++YYCURSOR;
YYDEBUG(203, *YYCURSOR); YYDEBUG(203, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 565 "Zend/zend_ini_scanner.l"
#line 572 "Zend/zend_ini_scanner.l"
{ /* Make = used in option value to trigger error */ { /* Make = used in option value to trigger error */
yyless(0); yyless(0);
BEGIN(INITIAL); BEGIN(INITIAL);
return END_OF_LINE; return END_OF_LINE;
} }
#line 2628 "Zend/zend_ini_scanner.c"
#line 2635 "Zend/zend_ini_scanner.c"
yy204: yy204:
YYDEBUG(204, *YYCURSOR); YYDEBUG(204, *YYCURSOR);
yyaccept = 4; yyaccept = 4;
@ -2671,11 +2678,11 @@ yy204:
yy206: yy206:
YYDEBUG(206, *YYCURSOR); YYDEBUG(206, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 549 "Zend/zend_ini_scanner.l"
#line 556 "Zend/zend_ini_scanner.l"
{ /* Get constant option value */ { /* Get constant option value */
RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
} }
#line 2679 "Zend/zend_ini_scanner.c"
#line 2686 "Zend/zend_ini_scanner.c"
yy207: yy207:
YYDEBUG(207, *YYCURSOR); YYDEBUG(207, *YYCURSOR);
yyaccept = 4; yyaccept = 4;
@ -3034,7 +3041,7 @@ yy217:
yy_push_state(ST_VARNAME); yy_push_state(ST_VARNAME);
return TC_DOLLAR_CURLY; return TC_DOLLAR_CURLY;
} }
#line 3038 "Zend/zend_ini_scanner.c"
#line 3045 "Zend/zend_ini_scanner.c"
yy219: yy219:
YYDEBUG(219, *YYCURSOR); YYDEBUG(219, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -3100,13 +3107,13 @@ yy223:
yy224: yy224:
YYDEBUG(224, *YYCURSOR); YYDEBUG(224, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 639 "Zend/zend_ini_scanner.l"
#line 646 "Zend/zend_ini_scanner.l"
{ /* Comment */ { /* Comment */
BEGIN(INITIAL); BEGIN(INITIAL);
SCNG(lineno)++; SCNG(lineno)++;
return END_OF_LINE; return END_OF_LINE;
} }
#line 3110 "Zend/zend_ini_scanner.c"
#line 3117 "Zend/zend_ini_scanner.c"
yy225: yy225:
YYDEBUG(225, *YYCURSOR); YYDEBUG(225, *YYCURSOR);
yych = *++YYCURSOR; yych = *++YYCURSOR;
@ -3221,7 +3228,7 @@ yy228:
{ /* FALSE value (when used outside option value/offset this causes parse error!)*/ { /* FALSE value (when used outside option value/offset this causes parse error!)*/
RETURN_TOKEN(BOOL_FALSE, "", 0); RETURN_TOKEN(BOOL_FALSE, "", 0);
} }
#line 3225 "Zend/zend_ini_scanner.c"
#line 3232 "Zend/zend_ini_scanner.c"
yy229: yy229:
YYDEBUG(229, *YYCURSOR); YYDEBUG(229, *YYCURSOR);
yyaccept = 4; yyaccept = 4;
@ -3372,7 +3379,7 @@ yy232:
{ /* TRUE value (when used outside option value/offset this causes parse error!) */ { /* TRUE value (when used outside option value/offset this causes parse error!) */
RETURN_TOKEN(BOOL_TRUE, "1", 1); RETURN_TOKEN(BOOL_TRUE, "1", 1);
} }
#line 3376 "Zend/zend_ini_scanner.c"
#line 3383 "Zend/zend_ini_scanner.c"
yy233: yy233:
YYDEBUG(233, *YYCURSOR); YYDEBUG(233, *YYCURSOR);
yyaccept = 4; yyaccept = 4;
@ -3501,7 +3508,7 @@ yy237:
} }
RETURN_TOKEN(TC_RAW, yytext, yyleng); RETURN_TOKEN(TC_RAW, yytext, yyleng);
} }
#line 3505 "Zend/zend_ini_scanner.c"
#line 3512 "Zend/zend_ini_scanner.c"
yy239: yy239:
YYDEBUG(239, *YYCURSOR); YYDEBUG(239, *YYCURSOR);
yyaccept = 4; yyaccept = 4;
@ -3820,7 +3827,7 @@ yy249:
{ {
RETURN_TOKEN(NULL_NULL, "", 0); RETURN_TOKEN(NULL_NULL, "", 0);
} }
#line 3824 "Zend/zend_ini_scanner.c"
#line 3831 "Zend/zend_ini_scanner.c"
yy250: yy250:
YYDEBUG(250, *YYCURSOR); YYDEBUG(250, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -3897,17 +3904,17 @@ yy254:
RETURN_TOKEN(TC_VARNAME, yytext, yyleng); RETURN_TOKEN(TC_VARNAME, yytext, yyleng);
} }
#line 3901 "Zend/zend_ini_scanner.c"
#line 3908 "Zend/zend_ini_scanner.c"
yy257: yy257:
YYDEBUG(257, *YYCURSOR); YYDEBUG(257, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
YYDEBUG(258, *YYCURSOR); YYDEBUG(258, *YYCURSOR);
yyleng = YYCURSOR - SCNG(yy_text); yyleng = YYCURSOR - SCNG(yy_text);
#line 650 "Zend/zend_ini_scanner.l"
#line 657 "Zend/zend_ini_scanner.l"
{ {
return 0; return 0;
} }
#line 3911 "Zend/zend_ini_scanner.c"
#line 3918 "Zend/zend_ini_scanner.c"
yy259: yy259:
YYDEBUG(259, *YYCURSOR); YYDEBUG(259, *YYCURSOR);
++YYCURSOR; ++YYCURSOR;
@ -3918,9 +3925,9 @@ yy259:
yy_pop_state(); yy_pop_state();
return '}'; return '}';
} }
#line 3922 "Zend/zend_ini_scanner.c"
#line 3929 "Zend/zend_ini_scanner.c"
} }
} }
#line 654 "Zend/zend_ini_scanner.l"
#line 661 "Zend/zend_ini_scanner.l"
} }

25
Zend/zend_ini_scanner.l

@ -501,6 +501,7 @@ SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
<ST_RAW>{RAW_VALUE_CHARS} { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ <ST_RAW>{RAW_VALUE_CHARS} { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
unsigned char *sc = NULL; unsigned char *sc = NULL;
EAT_LEADING_WHITESPACE();
while (YYCURSOR < YYLIMIT) { while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR) { switch (*YYCURSOR) {
case '\n': case '\n':
@ -511,28 +512,34 @@ SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
if (sc == NULL) { if (sc == NULL) {
sc = YYCURSOR; sc = YYCURSOR;
} }
/* no break */
YYCURSOR++;
break;
case '"':
if (yytext[0] == '"') {
sc = NULL;
}
YYCURSOR++;
break;
default: default:
YYCURSOR++; YYCURSOR++;
break; break;
} }
} }
end_raw_value_chars: end_raw_value_chars:
yyleng = YYCURSOR - SCNG(yy_text);
/* Eat trailing semicolons */
while (yytext[yyleng - 1] == ';') {
yyleng--;
if (sc) {
yyleng = sc - SCNG(yy_text);
} else {
yyleng = YYCURSOR - SCNG(yy_text);
} }
EAT_TRAILING_WHITESPACE();
/* Eat leading and trailing double quotes */ /* Eat leading and trailing double quotes */
if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') { if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') {
SCNG(yy_text)++; SCNG(yy_text)++;
yyleng = yyleng - 2; yyleng = yyleng - 2;
} else if (sc) {
YYCURSOR = sc;
yyleng = YYCURSOR - SCNG(yy_text);
} }
RETURN_TOKEN(TC_RAW, yytext, yyleng); RETURN_TOKEN(TC_RAW, yytext, yyleng);
} }

Loading…
Cancel
Save