From: Harald Radi Date: Sun, 19 Jan 2003 12:01:38 +0000 (+0000) Subject: ini patch to allow 'entry[] = value' entries X-Git-Tag: PHP_5_0_dev_before_13561_fix~126 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=697398e18ec87060f1f62a96e6e666d326eda0a9;p=php ini patch to allow 'entry[] = value' entries --- 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") %% +[ ]*[\[][ ]*[\]][ ]* { + return BRACK; +} [ ]*("true"|"on"|"yes")[ ]* { ini_lval->value.str.val = zend_strndup("1", 1); @@ -166,7 +169,7 @@ NEWLINE ("\r"|"\n"|"\r\n") } -[^=\n\r\t;|&~()!"]+ { +[^=\n\r\t;|&~()!"\[]+ { /* STRING */ register int i;