summaryrefslogtreecommitdiff
path: root/Zend/zend_ini_scanner.l
diff options
context:
space:
mode:
authorPierrick Charron <pierrick@php.net>2018-10-06 10:42:05 -0400
committerPierrick Charron <pierrick@php.net>2018-10-09 00:00:21 -0400
commitf42d7bddc0479651ecf7f9cdf375bba74b609bea (patch)
tree663cd0ed5a0a1c98b7c1c4bf53900321cf5274e1 /Zend/zend_ini_scanner.l
parent47b89bc5314534e4aab4a8d6cda0da9d079366f6 (diff)
downloadphp-git-f42d7bddc0479651ecf7f9cdf375bba74b609bea.tar.gz
Fixed bug #76965 INI_SCANNER_RAW doesn't strip trailing whitespace
Diffstat (limited to 'Zend/zend_ini_scanner.l')
-rw-r--r--Zend/zend_ini_scanner.l25
1 files changed, 16 insertions, 9 deletions
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index efe005e29a..3f574ff05e 100644
--- a/Zend/zend_ini_scanner.l
+++ b/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. */
unsigned char *sc = NULL;
+ EAT_LEADING_WHITESPACE();
while (YYCURSOR < YYLIMIT) {
switch (*YYCURSOR) {
case '\n':
@@ -511,28 +512,34 @@ SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
if (sc == NULL) {
sc = YYCURSOR;
}
- /* no break */
+ YYCURSOR++;
+ break;
+ case '"':
+ if (yytext[0] == '"') {
+ sc = NULL;
+ }
+ YYCURSOR++;
+ break;
default:
YYCURSOR++;
break;
}
}
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 */
if (yyleng > 1 && yytext[0] == '"' && yytext[yyleng - 1] == '"') {
SCNG(yy_text)++;
yyleng = yyleng - 2;
- } else if (sc) {
- YYCURSOR = sc;
- yyleng = YYCURSOR - SCNG(yy_text);
}
+
RETURN_TOKEN(TC_RAW, yytext, yyleng);
}