diff options
author | Pierrick Charron <pierrick@php.net> | 2018-10-09 01:26:55 -0400 |
---|---|---|
committer | Pierrick Charron <pierrick@php.net> | 2018-10-09 01:26:55 -0400 |
commit | 44d2c8c6ddb91663d2f84d621fde71eb3455d422 (patch) | |
tree | c9eadd20934d5d88ea0a93f2c787e809301985c0 /Zend/zend_ini_scanner.l | |
parent | 64881a1e64b47cb612d358f2ebf234defe314e90 (diff) | |
parent | efa5674a9b26864d35618360c2fc99f0b3374a64 (diff) | |
download | php-git-44d2c8c6ddb91663d2f84d621fde71eb3455d422.tar.gz |
Merge branch 'PHP-7.2' into PHP-7.3
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 1df110d50f..206afb2a70 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -499,6 +499,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': @@ -509,28 +510,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); } |