diff options
author | Pierrick Charron <pierrick@php.net> | 2018-10-06 10:42:05 -0400 |
---|---|---|
committer | Pierrick Charron <pierrick@php.net> | 2018-10-09 00:00:21 -0400 |
commit | f42d7bddc0479651ecf7f9cdf375bba74b609bea (patch) | |
tree | 663cd0ed5a0a1c98b7c1c4bf53900321cf5274e1 /Zend/zend_ini_scanner.l | |
parent | 47b89bc5314534e4aab4a8d6cda0da9d079366f6 (diff) | |
download | php-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.l | 25 |
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); } |