summaryrefslogtreecommitdiff
path: root/Zend
diff options
context:
space:
mode:
authorPierrick Charron <pierrick@php.net>2012-06-07 17:45:43 +0200
committerPierrick Charron <pierrick@php.net>2012-06-07 17:45:43 +0200
commit494c170e6ffcc989363a43f940c3c6414b05e08a (patch)
tree01fef29706a966d59b3b75e0dcf9bc6875fe96ac /Zend
parentdeac80eb9a50e788ecd292e104486699c5387ed8 (diff)
parentfed5923dbc849659321a4f9aa96634ddd1655229 (diff)
downloadphp-git-494c170e6ffcc989363a43f940c3c6414b05e08a.tar.gz
Merge branch 'PHP-5.3' into PHP-5.4
* PHP-5.3: Fixed bug #51094 (parse_ini_file() with INI_SCANNER_RAW cuts a value that includes a semi-colon)
Diffstat (limited to 'Zend')
-rw-r--r--Zend/zend_ini_scanner.l33
1 files changed, 27 insertions, 6 deletions
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index 0c452e659b..8aeb076eab 100644
--- a/Zend/zend_ini_scanner.l
+++ b/Zend/zend_ini_scanner.l
@@ -347,7 +347,7 @@ DOLLAR_CURLY "${"
SECTION_RAW_CHARS [^\]\n\r]
SINGLE_QUOTED_CHARS [^']
-RAW_VALUE_CHARS [^\n\r;\000]
+RAW_VALUE_CHARS [^"\n\r;\000]
LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR})))
VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR})
@@ -445,12 +445,33 @@ SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
return '=';
}
-<ST_RAW>{RAW_VALUE_CHARS}+ { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */
- /* Eat leading and trailing double quotes */
- if (yytext[0] == '"' && yytext[yyleng - 1] == '"') {
- SCNG(yy_text)++;
- yyleng = yyleng - 2;
+<ST_RAW>["] {
+ while (YYCURSOR < YYLIMIT) {
+ switch (*YYCURSOR++) {
+ case '\n':
+ 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);
}