From f42d7bddc0479651ecf7f9cdf375bba74b609bea Mon Sep 17 00:00:00 2001 From: Pierrick Charron Date: Sat, 6 Oct 2018 10:42:05 -0400 Subject: Fixed bug #76965 INI_SCANNER_RAW doesn't strip trailing whitespace --- Zend/zend_ini_scanner.l | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) (limited to 'Zend/zend_ini_scanner.l') 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}) {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); } -- cgit v1.2.1