summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_ini.h1
-rw-r--r--Zend/zend_ini_parser.y9
-rw-r--r--Zend/zend_ini_scanner.l5
3 files changed, 14 insertions, 1 deletions
diff --git a/Zend/zend_ini.h b/Zend/zend_ini.h
index e6cd22a770..416db5a112 100644
--- a/Zend/zend_ini.h
+++ b/Zend/zend_ini.h
@@ -191,6 +191,7 @@ typedef void (*zend_ini_parser_cb_t)(zval *arg1, zval *arg2, int callback_type,
int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_ini_parser_cb_t ini_parser_cb, void *arg);
#define ZEND_INI_PARSER_ENTRY 1
#define ZEND_INI_PARSER_SECTION 2
+#define ZEND_INI_PARSER_POP_ENTRY 3
typedef struct _zend_ini_parser_param {
zend_ini_parser_cb_t ini_parser_cb;
diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y
index 33b0bf005f..058d52d08a 100644
--- a/Zend/zend_ini_parser.y
+++ b/Zend/zend_ini_parser.y
@@ -178,6 +178,7 @@ int zend_parse_ini_file(zend_file_handle *fh, zend_bool unbuffered_errors, zend_
%pure_parser
%token TC_STRING
%token TC_ENCAPSULATED_STRING
+%token BRACK
%token SECTION
%token CFG_TRUE
%token CFG_FALSE
@@ -200,6 +201,14 @@ statement:
free($1.value.str.val);
free($3.value.str.val);
}
+ | TC_STRING BRACK '=' string_or_value {
+#if DEBUG_CFG_PARSER
+ printf("'%s'[ ] = '%s'\n", $1.value.str.val, $4.value.str.val);
+#endif
+ ZEND_INI_PARSER_CB(&$1, &$4, ZEND_INI_PARSER_POP_ENTRY, ZEND_INI_PARSER_ARG);
+ free($1.value.str.val);
+ free($4.value.str.val);
+ }
| TC_STRING { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG); free($1.value.str.val); }
| SECTION { ZEND_INI_PARSER_CB(&$1, NULL, ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG); free($1.value.str.val); }
| '\n'
diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l
index 65aa9e5781..16d4d30feb 100644
--- a/Zend/zend_ini_scanner.l
+++ b/Zend/zend_ini_scanner.l
@@ -108,6 +108,9 @@ NEWLINE ("\r"|"\n"|"\r\n")
%%
+<INITIAL>[ ]*[\[][ ]*[\]][ ]* {
+ return BRACK;
+}
<INITIAL>[ ]*("true"|"on"|"yes")[ ]* {
ini_lval->value.str.val = zend_strndup("1", 1);
@@ -166,7 +169,7 @@ NEWLINE ("\r"|"\n"|"\r\n")
}
-<INITIAL>[^=\n\r\t;|&~()!"]+ {
+<INITIAL>[^=\n\r\t;|&~()!"\[]+ {
/* STRING */
register int i;