mirror of
https://github.com/php/php-src.git
synced 2025-08-21 01:45:16 +02:00
Merge branch 'PHP-5.4'
* PHP-5.4: Fixed bug #51094 (parse_ini_file() with INI_SCANNER_RAW cuts a value that includes a semi-colon)
This commit is contained in:
commit
5b10a65617
2 changed files with 49 additions and 6 deletions
|
@ -347,7 +347,7 @@ DOLLAR_CURLY "${"
|
||||||
|
|
||||||
SECTION_RAW_CHARS [^\]\n\r]
|
SECTION_RAW_CHARS [^\]\n\r]
|
||||||
SINGLE_QUOTED_CHARS [^']
|
SINGLE_QUOTED_CHARS [^']
|
||||||
RAW_VALUE_CHARS [^\n\r;\000]
|
RAW_VALUE_CHARS [^"\n\r;\000]
|
||||||
|
|
||||||
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
|
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
|
||||||
VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
|
VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
|
||||||
|
@ -445,12 +445,33 @@ SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
|
||||||
return '=';
|
return '=';
|
||||||
}
|
}
|
||||||
|
|
||||||
<ST_RAW>{RAW_VALUE_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
|
<ST_RAW>["] {
|
||||||
/* Eat leading and trailing double quotes */
|
while (YYCURSOR < YYLIMIT) {
|
||||||
if (yytext[0] == '"' && yytext[yyleng - 1] == '"') {
|
switch (*YYCURSOR++) {
|
||||||
SCNG(yy_text)++;
|
case '\n':
|
||||||
yyleng = yyleng - 2;
|
SCNG(lineno)++;
|
||||||
|
break;
|
||||||
|
case '\r':
|
||||||
|
if (*YYCURSOR != '\n') {
|
||||||
|
SCNG(lineno)++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case '"':
|
||||||
|
yyleng = YYCURSOR - SCNG(yy_text) - 2;
|
||||||
|
SCNG(yy_text)++;
|
||||||
|
RETURN_TOKEN(TC_RAW, yytext, yyleng);
|
||||||
|
case '\\':
|
||||||
|
if (YYCURSOR < YYLIMIT) {
|
||||||
|
YYCURSOR++;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
yyleng = YYCURSOR - SCNG(yy_text);
|
||||||
|
RETURN_TOKEN(TC_RAW, yytext, yyleng);
|
||||||
|
}
|
||||||
|
|
||||||
|
<ST_RAW>{RAW_VALUE_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
|
||||||
RETURN_TOKEN(TC_RAW, yytext, yyleng);
|
RETURN_TOKEN(TC_RAW, yytext, yyleng);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
22
ext/standard/tests/file/bug51094.phpt
Normal file
22
ext/standard/tests/file/bug51094.phpt
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
--TEST--
|
||||||
|
Fixed bug #51094 (parse_ini_file() with INI_SCANNER_RAW cuts a value that includes a semi-colon).
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$ini = parse_ini_string('ini="ini;raw"', null, INI_SCANNER_RAW);
|
||||||
|
var_dump($ini['ini']);
|
||||||
|
$ini = parse_ini_string('ini="ini;raw', null, INI_SCANNER_RAW);
|
||||||
|
var_dump($ini['ini']);
|
||||||
|
$ini = parse_ini_string('ini=ini;raw', null, INI_SCANNER_RAW);
|
||||||
|
var_dump($ini['ini']);
|
||||||
|
$ini = parse_ini_string('ini=ini"raw', null, INI_SCANNER_RAW);
|
||||||
|
var_dump($ini['ini']);
|
||||||
|
$ini = parse_ini_string("ini=\r\niniraw", null, INI_SCANNER_RAW);
|
||||||
|
var_dump($ini['ini']);
|
||||||
|
--EXPECTF--
|
||||||
|
string(7) "ini;raw"
|
||||||
|
string(8) ""ini;raw"
|
||||||
|
string(3) "ini"
|
||||||
|
string(7) "ini"raw"
|
||||||
|
string(0) ""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue