jani            Mon Feb  4 20:45:16 2008 UTC

  Modified files:              
    /ZendEngine2        zend_ini_parser.y zend_ini_scanner.l 
    /php-src/ext/standard/tests/general_functions       parse_ini_basic.data 
                                                        parse_ini_basic.phpt 
                                                        parse_ini_booleans.data 
                                                        parse_ini_booleans.phpt 
  Log:
  - Fixed bugs #43915, #43923 and #44019, a tiny performance issue fixed too
  
  
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_parser.y?r1=1.49&r2=1.50&diff_format=u
Index: ZendEngine2/zend_ini_parser.y
diff -u ZendEngine2/zend_ini_parser.y:1.49 ZendEngine2/zend_ini_parser.y:1.50
--- ZendEngine2/zend_ini_parser.y:1.49  Mon Dec 31 07:12:07 2007
+++ ZendEngine2/zend_ini_parser.y       Mon Feb  4 20:45:15 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_parser.y,v 1.49 2007/12/31 07:12:07 sebastian Exp $ */
+/* $Id: zend_ini_parser.y,v 1.50 2008/02/04 20:45:15 jani Exp $ */
 
 #define DEBUG_CFG_PARSER 0
 
@@ -246,13 +246,16 @@
 
 %}
 
-%expect 1
+%expect 0
 %pure_parser
 
 %token TC_SECTION
 %token TC_RAW
+%token TC_CONSTANT
 %token TC_NUMBER
 %token TC_STRING
+%token TC_WHITESPACE
+%token TC_LABEL
 %token TC_OFFSET
 %token TC_DOLLAR_CURLY
 %token TC_VARNAME
@@ -260,7 +263,7 @@
 %token BOOL_TRUE
 %token BOOL_FALSE
 %token END_OF_LINE
-%token '=' ':' ',' '.' '"' '\'' '^' '+' '-' '/' '*' '%' '$' '~' '<' '>' '?' '@'
+%token '=' ':' ',' '.' '"' '\'' '^' '+' '-' '/' '*' '%' '$' '~' '<' '>' '?' 
'@' '{' '}'
 %left '|' '&'
 %right '~' '!'
 
@@ -279,7 +282,7 @@
                        ZEND_INI_PARSER_CB(&$2, NULL, NULL, 
ZEND_INI_PARSER_SECTION, ZEND_INI_PARSER_ARG TSRMLS_CC);
                        free(Z_STRVAL($2));
                }
-       |       TC_STRING '=' string_or_value {
+       |       TC_LABEL '=' string_or_value {
 #if DEBUG_CFG_PARSER
                        printf("NORMAL: '%s' = '%s'\n", Z_STRVAL($1), 
Z_STRVAL($3));
 #endif
@@ -296,32 +299,24 @@
                        free(Z_STRVAL($2));
                        free(Z_STRVAL($5));
                }
-       |       TC_STRING       { ZEND_INI_PARSER_CB(&$1, NULL, NULL, 
ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC); free(Z_STRVAL($1)); }
+       |       TC_LABEL        { ZEND_INI_PARSER_CB(&$1, NULL, NULL, 
ZEND_INI_PARSER_ENTRY, ZEND_INI_PARSER_ARG TSRMLS_CC); free(Z_STRVAL($1)); }
        |       END_OF_LINE
 ;
 
 section_string_or_value:
-               TC_RAW                                                  { $$ = 
$1; }
-       |       section_var_list                                { $$ = $1; }
-       |       '"' encapsed_list '"'                   { $$ = $2; }
+               var_string_list                                 { $$ = $1; }
        |       /* empty */                                             { 
zend_ini_init_string(&$$); }
 ;
 
 string_or_value:
                expr                                                    { $$ = 
$1; }
-       |       TC_RAW                                                  { $$ = 
$1; }
-       |       TC_NUMBER                                               { $$ = 
$1; }
        |       BOOL_TRUE                                               { $$ = 
$1; }
        |       BOOL_FALSE                                              { $$ = 
$1; }
-       |       '"' encapsed_list '"'                   { $$ = $2; }
        |       END_OF_LINE                                             { 
zend_ini_init_string(&$$); }
 ;
 
 option_offset:
-               TC_NUMBER                                               { $$ = 
$1; }
-       |       TC_RAW                                                  { $$ = 
$1; }
-       |       var_string_list                                 { $$ = $1; }
-       |       '"' encapsed_list '"'                   { $$ = $2; }
+               var_string_list                                 { $$ = $1; }
        |       /* empty */                                             { 
zend_ini_init_string(&$$); }
 ;
 
@@ -331,18 +326,13 @@
        |       /* empty */                                             { 
zend_ini_init_string(&$$); }
 ;
 
-section_var_list:
-               cfg_var_ref                                             { $$ = 
$1; }
-       |       TC_STRING                                               { $$ = 
$1; }
-       |       section_var_list cfg_var_ref    { zend_ini_add_string(&$$, &$1, 
&$2); free(Z_STRVAL($2)); }
-       |       section_var_list TC_STRING              { 
zend_ini_add_string(&$$, &$1, &$2); free(Z_STRVAL($2)); }
-;
-
 var_string_list:
                cfg_var_ref                                             { $$ = 
$1; }
        |       constant_string                                 { $$ = $1; }
+       |       '"' encapsed_list '"'                   { $$ = $2; }
        |       var_string_list cfg_var_ref     { zend_ini_add_string(&$$, &$1, 
&$2); free(Z_STRVAL($2)); }
        |       var_string_list constant_string { zend_ini_add_string(&$$, &$1, 
&$2); free(Z_STRVAL($2)); }
+       |       var_string_list '"' encapsed_list '"'  { 
zend_ini_add_string(&$$, &$1, &$3); free(Z_STRVAL($3)); }
 ;
 
 expr:
@@ -359,7 +349,11 @@
 ;
 
 constant_string:
-               TC_STRING                                               { 
zend_ini_get_constant(&$$, &$1 TSRMLS_CC); }
+               TC_CONSTANT                                             { 
zend_ini_get_constant(&$$, &$1 TSRMLS_CC); }
+       |       TC_RAW                                                  { $$ = 
$1; /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ }
+       |       TC_NUMBER                                               { $$ = 
$1; /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ }
+       |       TC_STRING                                               { $$ = 
$1; /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ }
+       |       TC_WHITESPACE                                   { $$ = $1; 
/*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ }
 ;
 
 /*
http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_ini_scanner.l?r1=1.49&r2=1.50&diff_format=u
Index: ZendEngine2/zend_ini_scanner.l
diff -u ZendEngine2/zend_ini_scanner.l:1.49 ZendEngine2/zend_ini_scanner.l:1.50
--- ZendEngine2/zend_ini_scanner.l:1.49 Tue Oct  2 16:52:53 2007
+++ ZendEngine2/zend_ini_scanner.l      Mon Feb  4 20:45:15 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
 */
 
-/* $Id: zend_ini_scanner.l,v 1.49 2007/10/02 16:52:53 jani Exp $ */
+/* $Id: zend_ini_scanner.l,v 1.50 2008/02/04 20:45:15 jani Exp $ */
 
 #define DEBUG_CFG_SCANNER 0
 
@@ -263,7 +263,6 @@
                } else {
                        *t++ = *s;
                }
-
                if (*s == '\n' || (*s == '\r' && (*(s+1) != '\n'))) {
                        SCNG(lineno)++;
                }
@@ -277,25 +276,26 @@
 
 LNUM [0-9]+
 DNUM ([0-9]*[\.][0-9]+)|([0-9]+[\.][0-9]*)
-NUMBER {LNUM}|{DNUM}
-ANY_CHAR (.|[\n])
+NUMBER [-]?{LNUM}|{DNUM}
+ANY_CHAR (.|[\n\t])
 NEWLINE        ("\r"|"\n"|"\r\n")
 TABS_AND_SPACES [ \t]
+WHITESPACE [ \t]+
 CONSTANT [a-zA-Z][a-zA-Z0-9_]*
-LABEL [a-zA-Z0-9][a-zA-Z0-9._]*
-TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>[EMAIL PROTECTED]
+LABEL [a-zA-Z0-9][a-zA-Z0-9._-]*
+TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>[EMAIL PROTECTED]
 OPERATORS [&|~()!]
+DOLLAR_CURLY "${"
 
-LITERAL_DOLLAR ("$"+([^a-zA-Z0-9$"'\\{]|("\\"{ANY_CHAR})))
-VALUE_CHARS ("{"*([^=\n\r;&|~()!$"'\\{]|("\\"{ANY_CHAR}))|{LITERAL_DOLLAR})
-RAW_VALUE_CHARS [^=\n\r;]
-SINGLE_QUOTED_CHARS [^']
-
-SECTION_VALUE_CHARS ("{"*([^\n\r;$"'\\{\]]|("\\"{ANY_CHAR}))|{LITERAL_DOLLAR})
 SECTION_RAW_CHARS [^\]\n\r]
+SINGLE_QUOTED_CHARS [^']
+RAW_VALUE_CHARS [^=\n\r;]
 
-/* Allow using ${foobar} inside quoted strings */
-DOUBLE_QUOTES_CHARS ("{"*([^$"\\{]|("\\"{ANY_CHAR}))|{LITERAL_DOLLAR})
+/* Allow using ${foobar} in sections, quoted strings and values */
+LITERAL_DOLLAR ("$"([^a-zA-Z0-9{]|("\\"{ANY_CHAR})))
+VALUE_CHARS         ([^$= \t\n\r;&|~()!"']|{LITERAL_DOLLAR})
+SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
+DOUBLE_QUOTES_CHARS ([^$"\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR})
 
 /* " */
 
@@ -348,7 +348,7 @@
        return ']';
 }
 
-<ST_DOUBLE_QUOTES,ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>"${" { /* Variable start 
*/
+<ST_DOUBLE_QUOTES,ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{DOLLAR_CURLY} { /* 
Variable start */
        yy_push_state(ST_VARNAME TSRMLS_CC);
        return TC_DOLLAR_CURLY;
 }
@@ -370,8 +370,8 @@
        RETURN_TOKEN(BOOL_FALSE, "", 0);
 }
 
-<INITIAL,ST_OFFSET>{LABEL} { /* Get option name or option offset value */
-       RETURN_TOKEN(TC_STRING, yytext, yyleng);
+<INITIAL>{LABEL} { /* Get option name */
+       RETURN_TOKEN(TC_LABEL, yytext, yyleng);
 }
 
 <INITIAL>{TABS_AND_SPACES}*[=]{TABS_AND_SPACES}* { /* Start option value */ 
@@ -397,17 +397,17 @@
        RETURN_TOKEN(TC_RAW, yytext, yyleng);
 }
 
-<ST_VALUE,ST_RAW>{NEWLINE} { /* End of option value */
+<ST_VALUE,ST_RAW>{TABS_AND_SPACES}*{NEWLINE} { /* End of option value */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
 }
 
-<ST_VALUE,ST_OFFSET>{CONSTANT} { /* Get constant option value */
-       RETURN_TOKEN(TC_STRING, yytext, yyleng);
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{CONSTANT} { /* Get constant option value 
*/
+       RETURN_TOKEN(TC_CONSTANT, yytext, yyleng);
 }
 
-<ST_VALUE,ST_OFFSET>{NUMBER} { /* Get number option value as string */
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{NUMBER} { /* Get number option value as 
string */
        RETURN_TOKEN(TC_NUMBER, yytext, yyleng);
 }
 
@@ -426,8 +426,6 @@
 }
 
 <ST_VALUE>{VALUE_CHARS}+ { /* Get everything else as option/offset value */
-       /* Eat trailing tabs and spaces */
-       EAT_TRAILING_WHITESPACE();
        RETURN_TOKEN(TC_STRING, yytext, yyleng);
 }
 
@@ -435,7 +433,7 @@
        RETURN_TOKEN(TC_STRING, yytext, yyleng);
 }
 
-<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>["] { /* Double quoted '"' string start */
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{TABS_AND_SPACES}*["] { /* Double quoted 
'"' string start */
        yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC);
        return '"';
 }
@@ -445,21 +443,25 @@
        return TC_QUOTED_STRING;
 }
 
-<ST_DOUBLE_QUOTES>["] { /* Double quoted '"' string ends */
+<ST_DOUBLE_QUOTES>["]{TABS_AND_SPACES}* { /* Double quoted '"' string ends */
        yy_pop_state(TSRMLS_C);
        return '"';
 }
 
-<INITIAL,ST_VALUE,ST_RAW,ST_OFFSET>{TABS_AND_SPACES} {
+<ST_SECTION_VALUE,ST_VALUE,ST_OFFSET>{WHITESPACE} {
+       RETURN_TOKEN(TC_WHITESPACE, yytext, yyleng);
+}
+
+<INITIAL,ST_RAW>{TABS_AND_SPACES}+ {
        /* eat whitespace */
 }
 
-<INITIAL>{NEWLINE} {
+<INITIAL>{TABS_AND_SPACES}*{NEWLINE} {
        SCNG(lineno)++;
        return END_OF_LINE;
 }
 
-<INITIAL,ST_VALUE,ST_RAW>[;][^\r\n]*{NEWLINE} { /* Comment */
+<INITIAL,ST_VALUE,ST_RAW>{TABS_AND_SPACES}*[;][^\r\n]*{NEWLINE} { /* Comment */
        BEGIN(INITIAL);
        SCNG(lineno)++;
        return END_OF_LINE;
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/parse_ini_basic.data?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/standard/tests/general_functions/parse_ini_basic.data
diff -u php-src/ext/standard/tests/general_functions/parse_ini_basic.data:1.1 
php-src/ext/standard/tests/general_functions/parse_ini_basic.data:1.2
--- php-src/ext/standard/tests/general_functions/parse_ini_basic.data:1.1       
Fri Sep 28 02:04:28 2007
+++ php-src/ext/standard/tests/general_functions/parse_ini_basic.data   Mon Feb 
 4 20:45:16 2008
@@ -13,6 +13,7 @@
 sqstring = 'adsasdadasdasd'
 dqstring = "asdadfsdjkslkj [EMAIL PROTECTED] { } !^~|¥¥{[()/)&/% ¤ # #"
 php_constant = E_ALL
+user_constant = TEST_CONSTANT
 
 [basic with whitespace]
 basicval =              bar                            
@@ -89,7 +90,7 @@
 ;[PATH="${basicval}/path/quoted"]
 ["PATH=${basicval}/all/quoted"]
 
-; The rest is from bug #29306
+; This is test for bug #29306
 [01]
 e=e
 f=f
@@ -104,3 +105,25 @@
 d=d
 [0815]
 bla=bla
+
+;Test for bug #43923
+[bug #43923]
+curly1 = {
+curly2 = "{"
+curly3 = '{'
+
+;Test for bug #44019
+[bug #44019]
+concatenation_before = TEST_CONSTANT "+some_text_after"
+concatenation_middle = "some_text_before+" TEST_CONSTANT "+some_text_after"
+concatenation_after = "some_text_before+" TEST_CONSTANT
+concatenation_nows_before = TEST_CONSTANT"+some_text_after"
+concatenation_nows_middle = "some_text_before+"TEST_CONSTANT"+some_text_after"
+concatenation_nows_after = "some_text_before+"TEST_CONSTANT
+
+;Test for bug #43915
+[bug #43915]
+ini_with-hyphen = with hyphen and underscore
+ini.with-hyphen = dot and hyphen
+ini-with.hyphen = hyphen and dot
+
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/parse_ini_basic.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/standard/tests/general_functions/parse_ini_basic.phpt
diff -u php-src/ext/standard/tests/general_functions/parse_ini_basic.phpt:1.1 
php-src/ext/standard/tests/general_functions/parse_ini_basic.phpt:1.2
--- php-src/ext/standard/tests/general_functions/parse_ini_basic.phpt:1.1       
Fri Sep 28 02:04:28 2007
+++ php-src/ext/standard/tests/general_functions/parse_ini_basic.phpt   Mon Feb 
 4 20:45:16 2008
@@ -8,14 +8,16 @@
 
 $ini_file = dirname(__FILE__)."/parse_ini_basic.data";
 
+define('TEST_CONSTANT', 'this_is_test_constant');
+
 var_dump(parse_ini_file($ini_file, 1));
 
 echo "Done.\n";
 ?>
 --EXPECTF--    
-array(22) {
+array(25) {
   ["basic"]=>
-  array(14) {
+  array(15) {
     ["basicval"]=>
     string(3) "bar"
     ["longval"]=>
@@ -44,6 +46,8 @@
     string(51) "asdadfsdjkslkj [EMAIL PROTECTED] { } !^~|¥¥{[()/)&/% ¤ # #"
     ["php_constant"]=>
     string(4) "8191"
+    ["user_constant"]=>
+    string(21) "this_is_test_constant"
   }
   ["basic with whitespace"]=>
   array(13) {
@@ -235,5 +239,38 @@
     ["bla"]=>
     string(3) "bla"
   }
+  ["bug #43923"]=>
+  array(3) {
+    ["curly1"]=>
+    string(1) "{"
+    ["curly2"]=>
+    string(1) "{"
+    ["curly3"]=>
+    string(1) "{"
+  }
+  ["bug #44019"]=>
+  array(6) {
+    ["concatenation_before"]=>
+    string(37) "this_is_test_constant+some_text_after"
+    ["concatenation_middle"]=>
+    string(54) "some_text_before+this_is_test_constant+some_text_after"
+    ["concatenation_after"]=>
+    string(38) "some_text_before+this_is_test_constant"
+    ["concatenation_nows_before"]=>
+    string(37) "this_is_test_constant+some_text_after"
+    ["concatenation_nows_middle"]=>
+    string(54) "some_text_before+this_is_test_constant+some_text_after"
+    ["concatenation_nows_after"]=>
+    string(38) "some_text_before+this_is_test_constant"
+  }
+  ["bug #43915"]=>
+  array(3) {
+    ["ini_with-hyphen"]=>
+    string(26) "with hyphen and underscore"
+    ["ini.with-hyphen"]=>
+    string(14) "dot and hyphen"
+    ["ini-with.hyphen"]=>
+    string(14) "hyphen and dot"
+  }
 }
 Done.
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/parse_ini_booleans.data?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/standard/tests/general_functions/parse_ini_booleans.data
diff -u 
php-src/ext/standard/tests/general_functions/parse_ini_booleans.data:1.1 
php-src/ext/standard/tests/general_functions/parse_ini_booleans.data:1.2
--- php-src/ext/standard/tests/general_functions/parse_ini_booleans.data:1.1    
Fri Sep 28 02:04:28 2007
+++ php-src/ext/standard/tests/general_functions/parse_ini_booleans.data        
Mon Feb  4 20:45:16 2008
@@ -6,7 +6,7 @@
 error_reporting3 =  E_ALL & ~E_NOTICE   
 error_reporting4 = E_ALL & ~E_NOTICE | E_STRICT 
 
-[true or false]
+['true or false']
 bool_true =    true 
 bool_yes  =  yes        
 bool_on =         on    
http://cvs.php.net/viewvc.cgi/php-src/ext/standard/tests/general_functions/parse_ini_booleans.phpt?r1=1.1&r2=1.2&diff_format=u
Index: php-src/ext/standard/tests/general_functions/parse_ini_booleans.phpt
diff -u 
php-src/ext/standard/tests/general_functions/parse_ini_booleans.phpt:1.1 
php-src/ext/standard/tests/general_functions/parse_ini_booleans.phpt:1.2
--- php-src/ext/standard/tests/general_functions/parse_ini_booleans.phpt:1.1    
Fri Sep 28 02:04:28 2007
+++ php-src/ext/standard/tests/general_functions/parse_ini_booleans.phpt        
Mon Feb  4 20:45:16 2008
@@ -15,7 +15,7 @@
   ["error_reporting values"]=>
   array(6) {
     ["foo"]=>
-    string(14) "E_ALL E_NOTICE"
+    string(6) "8191 8"
     ["error_reporting"]=>
     string(4) "8191"
     ["error_reporting1"]=>

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to