summaryrefslogtreecommitdiff
path: root/Zend/zend_ini_scanner.l
diff options
context:
space:
mode:
authorPierrick Charron <pierrick@php.net>2018-10-09 01:26:55 -0400
committerPierrick Charron <pierrick@php.net>2018-10-09 01:26:55 -0400
commit44d2c8c6ddb91663d2f84d621fde71eb3455d422 (patch)
treec9eadd20934d5d88ea0a93f2c787e809301985c0 /Zend/zend_ini_scanner.l
parent64881a1e64b47cb612d358f2ebf234defe314e90 (diff)
parentefa5674a9b26864d35618360c2fc99f0b3374a64 (diff)
downloadphp-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.l25
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);
}