diff options
author | Ondřej Surý <ondrej@sury.org> | 2013-04-11 17:20:31 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2013-04-11 17:20:31 +0200 |
commit | 5a7c0b1f326279a6d7dba8285e81860e1f0ff8ce (patch) | |
tree | 81f2fb75f657f6a90ad1ef8901b9408ce17b20ae /Zend | |
parent | cf099ba2ee4e438bae16c3670a14ce0c4390529a (diff) | |
download | php-5a7c0b1f326279a6d7dba8285e81860e1f0ff8ce.tar.gz |
Imported Upstream version 5.5.0~beta3upstream/5.5.0_beta3
Diffstat (limited to 'Zend')
27 files changed, 690 insertions, 863 deletions
diff --git a/Zend/acinclude.m4 b/Zend/acinclude.m4 index 136d2d8be..454513f68 100644 --- a/Zend/acinclude.m4 +++ b/Zend/acinclude.m4 @@ -4,7 +4,7 @@ dnl This file contains local autoconf functions. AC_DEFUN([LIBZEND_BISON_CHECK],[ # we only support certain bison versions - bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2" + bison_version_list="2.4 2.4.1 2.4.2 2.4.3 2.5 2.5.1 2.6 2.6.1 2.6.2 2.6.3 2.6.4 2.6.5 2.7" # for standalone build of Zend Engine test -z "$SED" && SED=sed diff --git a/Zend/tests/bug43450.phpt b/Zend/tests/bug43450.phpt index 926e146f4..a94eba312 100644 --- a/Zend/tests/bug43450.phpt +++ b/Zend/tests/bug43450.phpt @@ -2,6 +2,8 @@ Bug #43450 (Memory leak on some functions with implicit object __toString() call) --SKIPIF-- <?php if (!function_exists('memory_get_usage')) die('memory_get_usage() not installed'); ?> +--INI-- +opcache.enable_cli=0 --FILE-- <?php error_reporting(E_ALL|E_STRICT); diff --git a/Zend/tests/bug60771.phpt b/Zend/tests/bug60771.phpt index 2cf69f782..c20bbc462 100644 --- a/Zend/tests/bug60771.phpt +++ b/Zend/tests/bug60771.phpt @@ -4,6 +4,7 @@ test of larger than 8kb text file being parsed by require statement <?php
file_put_contents('test.php',str_repeat('passed, ',1024));
require('test.php');
+ unlink('test.php');
?>
--EXPECT--
passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed,
diff --git a/Zend/tests/bug64555.phpt b/Zend/tests/bug64555.phpt new file mode 100644 index 000000000..d5226af7a --- /dev/null +++ b/Zend/tests/bug64555.phpt @@ -0,0 +1,42 @@ +--TEST-- +Bug #64555: Array key within interned string gets wrong hash value +--FILE-- +<?php + +class Foo { + protected $unsetme = 1; + protected $keepme = 2; + + public function test() { + $a = get_object_vars($this); + + foreach ($a as $k => $v) { + if ($k == 'unsetme') { + echo "Unsetting: $k\n"; + unset($a[$k]); + } else if ($k == 'keepme') { + echo "Changing: $k\n"; + $a[$k] = 42; + $a['keepme'] = 43; + } + } + + var_dump($a, array_keys($a)); + } +} + +$f = new Foo; +$f->test(); + +?> +--EXPECT-- +Unsetting: unsetme +Changing: keepme +array(1) { + ["keepme"]=> + int(43) +} +array(1) { + [0]=> + string(6) "keepme" +} diff --git a/Zend/tests/bug64578.phpt b/Zend/tests/bug64578.phpt new file mode 100644 index 000000000..6cb5392ce --- /dev/null +++ b/Zend/tests/bug64578.phpt @@ -0,0 +1,14 @@ +--TEST-- +Bug #64578 (debug_backtrace in set_error_handler corrupts zend heap: segfault) +--FILE-- +<?php + +set_error_handler(function($no, $err) { var_dump($err); }); + +function x($s) { $s['a'] = 1; }; +$y = '1'; +x($y); +print_r($y); +--EXPECTF-- +string(25) "Illegal string offset 'a'" +1 diff --git a/Zend/tests/generators/clone.phpt b/Zend/tests/generators/clone.phpt index 36811dfe6..22f442812 100644 --- a/Zend/tests/generators/clone.phpt +++ b/Zend/tests/generators/clone.phpt @@ -1,32 +1,15 @@ --TEST-- -Generators can be cloned +Generators cannot be cloned --FILE-- <?php -function firstN($end) { - for ($i = 0; $i < $end; ++$i) { - yield $i; - } +function gen() { + yield; } -$g1 = firstN(5); -var_dump($g1->current()); -$g1->next(); - -$g2 = clone $g1; -var_dump($g2->current()); -$g2->next(); - -var_dump($g2->current()); -var_dump($g1->current()); - -$g1->next(); -var_dump($g1->current()); +$gen = gen(); +clone $gen; ?> ---EXPECT-- -int(0) -int(1) -int(2) -int(1) -int(2) +--EXPECTF-- +Fatal error: Trying to clone an uncloneable object of class Generator in %s on line %d diff --git a/Zend/tests/generators/clone_after_object_call.phpt b/Zend/tests/generators/clone_after_object_call.phpt deleted file mode 100644 index 0a424268c..000000000 --- a/Zend/tests/generators/clone_after_object_call.phpt +++ /dev/null @@ -1,20 +0,0 @@ ---TEST-- -Cloning a generator after an object method was called ---FILE-- -<?php - -class A { public function b() { } } - -function gen() { - $a = new A; - $a->b(); - yield; -} - -$g1 = gen(); -$g1->rewind(); -$g2 = clone $g1; - -echo "Done"; ---EXPECT-- -Done diff --git a/Zend/tests/generators/clone_with_foreach.phpt b/Zend/tests/generators/clone_with_foreach.phpt deleted file mode 100644 index b05ed0731..000000000 --- a/Zend/tests/generators/clone_with_foreach.phpt +++ /dev/null @@ -1,33 +0,0 @@ ---TEST-- -Cloning a generator with a foreach loop properly adds a ref for the loop var ---FILE-- -<?php - -function gen() { - foreach ([1, 2, 3] as $i) { - yield $i; - } -} - -$g1 = gen(); -var_dump($g1->current()); - -$g2 = clone $g1; -var_dump($g2->current()); - -$g1->next(); -$g2->next(); -var_dump($g1->current()); -var_dump($g2->current()); - -unset($g1); -$g2->next(); -var_dump($g2->current()); - -?> ---EXPECT-- -int(1) -int(1) -int(2) -int(2) -int(3) diff --git a/Zend/tests/generators/clone_with_properties.phpt b/Zend/tests/generators/clone_with_properties.phpt deleted file mode 100644 index 900253c68..000000000 --- a/Zend/tests/generators/clone_with_properties.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -Tests cloning a generator with properties ---FILE-- -<?php - -function gen() { yield; } - -$g1 = gen(); -$g1->prop = 'val'; - -$g2 = clone $g1; -unset($g1); - -var_dump($g2->prop); - -?> ---EXPECT-- -string(3) "val" diff --git a/Zend/tests/generators/clone_with_stack.phpt b/Zend/tests/generators/clone_with_stack.phpt deleted file mode 100644 index 5a8e6d842..000000000 --- a/Zend/tests/generators/clone_with_stack.phpt +++ /dev/null @@ -1,18 +0,0 @@ ---TEST-- -A generator with an active stack can be cloned ---FILE-- -<?php - -function gen() { - var_dump(str_repeat("x", yield)); -} - -$g1 = gen(); -$g1->rewind(); -$g2 = clone $g1; -unset($g1); -$g2->send(10); - -?> ---EXPECT-- -string(10) "xxxxxxxxxx" diff --git a/Zend/tests/generators/clone_with_symbol_table.phpt b/Zend/tests/generators/clone_with_symbol_table.phpt deleted file mode 100644 index e1fefebd8..000000000 --- a/Zend/tests/generators/clone_with_symbol_table.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -A generator using a symbol table can be cloned ---FILE-- -<?php - -function gen() { - // force compiled variable for $foo - $foo = 'foo'; - - // force symbol table - extract(['foo' => 'bar']); - - // interrupt - yield; - - var_dump($foo); -} - -$g1 = gen(); -$g1->rewind(); -$g2 = clone $g1; -unset($g1); -$g2->next(); - -?> ---EXPECT-- -string(3) "bar" diff --git a/Zend/tests/generators/clone_with_this.phpt b/Zend/tests/generators/clone_with_this.phpt deleted file mode 100644 index b242d851e..000000000 --- a/Zend/tests/generators/clone_with_this.phpt +++ /dev/null @@ -1,24 +0,0 @@ ---TEST-- -Cloning a generator method (with $this) ---FILE-- -<?php - -class Test { - protected $foo; - - public function gen() { - $this->foo = 'bar'; - yield; // interrupt - var_dump($this->foo); - } -} - -$g1 = (new Test)->gen(); -$g1->rewind(); // goto yield -$g2 = clone $g1; -unset($g1); -$g2->next(); - -?> ---EXPECT-- -string(3) "bar" diff --git a/Zend/tests/generators/nested_method_calls.phpt b/Zend/tests/generators/nested_method_calls.phpt index 98aee2e60..0d640b31c 100644 --- a/Zend/tests/generators/nested_method_calls.phpt +++ b/Zend/tests/generators/nested_method_calls.phpt @@ -26,10 +26,7 @@ $g2 = gen(new B); $g2->current(); $g1->next(); - -$g3 = clone $g2; -unset($g2); -$g3->next(); +$g2->next(); ?> --EXPECT-- diff --git a/Zend/tests/generators/yield_during_method_call.phpt b/Zend/tests/generators/yield_during_method_call.phpt index 5fbe84fff..3a9914d58 100644 --- a/Zend/tests/generators/yield_during_method_call.phpt +++ b/Zend/tests/generators/yield_during_method_call.phpt @@ -22,14 +22,6 @@ $gen = gen(); $gen->rewind(); unset($gen); -// test cloning -$g1 = gen(); -$g1->rewind(); -$g2 = clone $g1; -unset($g1); -$g2->send('bar'); - ?> --EXPECT-- foo -bar diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index 6df3defb1..768079091 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -1809,7 +1809,7 @@ void zend_do_end_function_declaration(const znode *function_token TSRMLS_DC) /* zend_do_return(NULL, 0 TSRMLS_CC); pass_two(CG(active_op_array) TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); if (CG(active_class_entry)) { zend_check_magic_method_implementation(CG(active_class_entry), (zend_function*)CG(active_op_array), E_COMPILE_ERROR TSRMLS_CC); @@ -2391,13 +2391,14 @@ void zend_do_goto(const znode *label TSRMLS_DC) /* {{{ */ } /* }}} */ -void zend_release_labels(TSRMLS_D) /* {{{ */ +void zend_release_labels(int temporary TSRMLS_DC) /* {{{ */ { if (CG(context).labels) { zend_hash_destroy(CG(context).labels); FREE_HASHTABLE(CG(context).labels); + CG(context).labels = NULL; } - if (!zend_stack_is_empty(&CG(context_stack))) { + if (!temporary && !zend_stack_is_empty(&CG(context_stack))) { zend_compiler_context *ctx; zend_stack_top(&CG(context_stack), (void**)&ctx); diff --git a/Zend/zend_compile.h b/Zend/zend_compile.h index 2295cffab..9c55b5ebe 100644 --- a/Zend/zend_compile.h +++ b/Zend/zend_compile.h @@ -643,7 +643,7 @@ void zend_do_resolve_class_name(znode *result, znode *class_name, int is_static void zend_do_label(znode *label TSRMLS_DC); void zend_do_goto(const znode *label TSRMLS_DC); void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2 TSRMLS_DC); -void zend_release_labels(TSRMLS_D); +void zend_release_labels(int temporary TSRMLS_DC); ZEND_API void function_add_ref(zend_function *function); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index a7674ca8a..a65f5331d 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -898,13 +898,10 @@ static inline zval* zend_assign_to_variable(zval **variable_ptr_ptr, zval *value } else if (EXPECTED(!PZVAL_IS_REF(value))) { Z_ADDREF_P(value); *variable_ptr_ptr = value; - if (EXPECTED(variable_ptr != &EG(uninitialized_zval))) { - GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr); - zval_dtor(variable_ptr); - efree(variable_ptr); - } else { - Z_DELREF_P(variable_ptr); - } + ZEND_ASSERT(variable_ptr != &EG(uninitialized_zval)); + GC_REMOVE_ZVAL_FROM_BUFFER(variable_ptr); + zval_dtor(variable_ptr); + efree(variable_ptr); return value; } else { goto copy_value; @@ -1147,6 +1144,10 @@ convert_to_array: zend_error_noreturn(E_ERROR, "[] operator not supported for strings"); } + if (type != BP_VAR_UNSET) { + SEPARATE_ZVAL_IF_NOT_REF(container_ptr); + } + if (Z_TYPE_P(dim) != IS_LONG) { switch(Z_TYPE_P(dim)) { @@ -1175,9 +1176,6 @@ convert_to_array: convert_to_long(&tmp); dim = &tmp; } - if (type != BP_VAR_UNSET) { - SEPARATE_ZVAL_IF_NOT_REF(container_ptr); - } container = *container_ptr; result->str_offset.str = container; PZVAL_LOCK(container); diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index f099784a4..8739e21c2 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -1295,7 +1295,7 @@ void execute_new_code(TSRMLS_D) /* {{{ */ opline++; } - zend_release_labels(TSRMLS_C); + zend_release_labels(1 TSRMLS_CC); EG(return_value_ptr_ptr) = NULL; EG(active_op_array) = CG(active_op_array); diff --git a/Zend/zend_generators.c b/Zend/zend_generators.c index 3f43552f1..d189148f4 100644 --- a/Zend/zend_generators.c +++ b/Zend/zend_generators.c @@ -196,175 +196,6 @@ static void zend_generator_free_storage(zend_generator *generator TSRMLS_DC) /* } /* }}} */ -static zend_object_value zend_generator_clone(zval *object TSRMLS_DC) /* {{{ */ -{ - zend_generator *orig = zend_object_store_get_object(object TSRMLS_CC); - zend_object_value clone_val = zend_generator_create(Z_OBJCE_P(object) TSRMLS_CC); - zend_generator *clone = zend_object_store_get_object_by_handle(clone_val.handle TSRMLS_CC); - - zend_objects_clone_members( - &clone->std, clone_val, &orig->std, Z_OBJ_HANDLE_P(object) TSRMLS_CC - ); - - clone->execute_data = orig->execute_data; - clone->largest_used_integer_key = orig->largest_used_integer_key; - clone->flags = orig->flags; - - if (orig->execute_data) { - /* Create a few shorter aliases to the old execution data */ - zend_execute_data *execute_data = orig->execute_data; - zend_op_array *op_array = execute_data->op_array; - HashTable *symbol_table = execute_data->symbol_table; - zend_execute_data *current_execute_data; - zend_op **opline_ptr; - HashTable *current_symbol_table; - zend_vm_stack current_stack; - zval *current_this; - void **stack_frame, **orig_stack_frame; - - /* Create new execution context. We have to back up and restore - * EG(current_execute_data), EG(opline_ptr), EG(active_symbol_table) - * and EG(This) here because the function modifies or uses them */ - current_execute_data = EG(current_execute_data); - EG(current_execute_data) = execute_data->prev_execute_data; - opline_ptr = EG(opline_ptr); - current_symbol_table = EG(active_symbol_table); - EG(active_symbol_table) = execute_data->symbol_table; - current_this = EG(This); - EG(This) = NULL; - current_stack = EG(argument_stack); - clone->execute_data = zend_create_execute_data_from_op_array(op_array, 0 TSRMLS_CC); - clone->stack = EG(argument_stack); - EG(argument_stack) = current_stack; - EG(This) = current_this; - EG(active_symbol_table) = current_symbol_table; - EG(current_execute_data) = current_execute_data; - EG(opline_ptr) = opline_ptr; - - /* copy */ - clone->execute_data->opline = execute_data->opline; - clone->execute_data->function_state = execute_data->function_state; - clone->execute_data->object = execute_data->object; - clone->execute_data->current_scope = execute_data->current_scope; - clone->execute_data->current_called_scope = execute_data->current_called_scope; - clone->execute_data->fast_ret = execute_data->fast_ret; - - if (!symbol_table) { - int i; - - /* Copy compiled variables */ - for (i = 0; i < op_array->last_var; i++) { - if (*EX_CV_NUM(execute_data, i)) { - *EX_CV_NUM(clone->execute_data, i) = (zval **) EX_CV_NUM(clone->execute_data, op_array->last_var + i); - **EX_CV_NUM(clone->execute_data, i) = *(zval **) EX_CV_NUM(execute_data, op_array->last_var + i); - Z_ADDREF_PP(*EX_CV_NUM(clone->execute_data, i)); - } - } - } else { - /* Copy symbol table */ - ALLOC_HASHTABLE(clone->execute_data->symbol_table); - zend_hash_init(clone->execute_data->symbol_table, zend_hash_num_elements(symbol_table), NULL, ZVAL_PTR_DTOR, 0); - zend_hash_copy(clone->execute_data->symbol_table, symbol_table, (copy_ctor_func_t) zval_add_ref, NULL, sizeof(zval *)); - - /* Update zval** pointers for compiled variables */ - { - int i; - for (i = 0; i < op_array->last_var; i++) { - if (zend_hash_quick_find(clone->execute_data->symbol_table, op_array->vars[i].name, op_array->vars[i].name_len + 1, op_array->vars[i].hash_value, (void **) EX_CV_NUM(clone->execute_data, i)) == FAILURE) { - *EX_CV_NUM(clone->execute_data, i) = NULL; - } - } - } - } - - /* Copy nested-calls stack */ - if (execute_data->call) { - clone->execute_data->call = clone->execute_data->call_slots + - (execute_data->call - execute_data->call_slots); - } else { - clone->execute_data->call = NULL; - } - memcpy(clone->execute_data->call_slots, execute_data->call_slots, ZEND_MM_ALIGNED_SIZE(sizeof(call_slot)) * op_array->nested_calls); - if (clone->execute_data->call >= clone->execute_data->call_slots) { - call_slot *call = clone->execute_data->call; - - while (call >= clone->execute_data->call_slots) { - if (call->object) { - Z_ADDREF_P(call->object); - } - call--; - } - } - - /* Copy the temporary variables */ - memcpy(EX_TMP_VAR_NUM(clone->execute_data, op_array->T-1), EX_TMP_VAR_NUM(execute_data, op_array->T-1), ZEND_MM_ALIGNED_SIZE(sizeof(temp_variable)) * op_array->T); - - /* Copy arguments passed on stack */ - stack_frame = zend_vm_stack_frame_base(clone->execute_data); - orig_stack_frame = zend_vm_stack_frame_base(execute_data); - clone->stack->top = stack_frame + (orig->stack->top - orig_stack_frame); - if (clone->stack->top != stack_frame) { - memcpy(stack_frame, orig_stack_frame, ZEND_MM_ALIGNED_SIZE(sizeof(zval*)) * (orig->stack->top - orig_stack_frame)); - while (clone->stack->top != stack_frame) { - Z_ADDREF_PP((zval**)stack_frame); - stack_frame++; - } - } - - /* Add references to loop variables */ - { - zend_uint op_num = execute_data->opline - op_array->opcodes; - - int i; - for (i = 0; i < op_array->last_brk_cont; ++i) { - zend_brk_cont_element *brk_cont = op_array->brk_cont_array + i; - - if (brk_cont->start < 0) { - continue; - } else if (brk_cont->start > op_num) { - break; - } else if (brk_cont->brk > op_num) { - zend_op *brk_opline = op_array->opcodes + brk_cont->brk; - - if (brk_opline->opcode == ZEND_SWITCH_FREE) { - temp_variable *var = EX_TMP_VAR(execute_data, brk_opline->op1.var); - - Z_ADDREF_P(var->var.ptr); - } - } - } - } - - /* Update the send_target to use the temporary variable with the same - * offset as the original generator, but in our temporary variable - * memory segment. */ - if (orig->send_target) { - size_t offset = (char *) orig->send_target - (char *)execute_data; - clone->send_target = EX_TMP_VAR(clone->execute_data, offset); - zval_copy_ctor(&clone->send_target->tmp_var); - } - - if (execute_data->current_this) { - clone->execute_data->current_this = execute_data->current_this; - Z_ADDREF_P(execute_data->current_this); - } - } - - /* The value and key are known not to be references, so simply add refs */ - if (orig->value) { - clone->value = orig->value; - Z_ADDREF_P(orig->value); - } - - if (orig->key) { - clone->key = orig->key; - Z_ADDREF_P(orig->key); - } - - return clone_val; -} -/* }}} */ - static zend_object_value zend_generator_create(zend_class_entry *class_type TSRMLS_DC) /* {{{ */ { zend_generator *generator; @@ -867,7 +698,7 @@ void zend_register_generator_ce(TSRMLS_D) /* {{{ */ memcpy(&zend_generator_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); zend_generator_handlers.get_constructor = zend_generator_get_constructor; - zend_generator_handlers.clone_obj = zend_generator_clone; + zend_generator_handlers.clone_obj = NULL; } /* }}} */ diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c index bca47b330..27b603eed 100644 --- a/Zend/zend_hash.c +++ b/Zend/zend_hash.c @@ -1182,7 +1182,7 @@ ZEND_API void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, Z_TYPE_P(key) = IS_NULL; } else if (p->nKeyLength) { Z_TYPE_P(key) = IS_STRING; - Z_STRVAL_P(key) = IS_INTERNED(p->arKey) ? (char *) p->arKey : estrndup(p->arKey, p->nKeyLength - 1); + Z_STRVAL_P(key) = estrndup(p->arKey, p->nKeyLength - 1); Z_STRLEN_P(key) = p->nKeyLength - 1; } else { Z_TYPE_P(key) = IS_LONG; diff --git a/Zend/zend_ini_parser.c b/Zend/zend_ini_parser.c index 70be84343..e27e539f8 100644 --- a/Zend/zend_ini_parser.c +++ b/Zend/zend_ini_parser.c @@ -144,6 +144,9 @@ static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2) case '&': i_result = i_op1 & i_op2; break; + case '^': + i_result = i_op1 ^ i_op2; + break; case '~': i_result = ~i_op1; break; @@ -609,16 +612,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 109 +#define YYLAST 121 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 43 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 13 /* YYNRULES -- Number of rules. */ -#define YYNRULES 48 +#define YYNRULES 49 /* YYNRULES -- Number of states. */ -#define YYNSTATES 69 +#define YYNSTATES 71 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -668,8 +671,8 @@ static const yytype_uint8 yyprhs[] = 0, 0, 3, 6, 7, 11, 15, 21, 23, 25, 27, 28, 30, 32, 34, 36, 38, 39, 42, 45, 46, 48, 50, 54, 57, 60, 65, 67, 69, 73, - 76, 79, 84, 86, 90, 94, 97, 100, 104, 108, - 110, 112, 114, 116, 118, 120, 122, 124, 126 + 76, 79, 84, 86, 90, 94, 98, 101, 104, 108, + 112, 114, 116, 118, 120, 122, 124, 126, 128, 130 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ @@ -684,20 +687,21 @@ static const yytype_int8 yyrhs[] = 50, 21, 49, 21, -1, 53, -1, 55, -1, 21, 49, 21, -1, 51, 53, -1, 51, 55, -1, 51, 21, 49, 21, -1, 51, -1, 52, 37, 52, -1, - 52, 38, 52, -1, 30, 52, -1, 39, 52, -1, - 41, 52, 42, -1, 11, 12, 36, -1, 5, -1, - 4, -1, 6, -1, 7, -1, 8, -1, 5, -1, - 4, -1, 6, -1, 7, -1, 8, -1 + 52, 38, 52, -1, 52, 23, 52, -1, 30, 52, + -1, 39, 52, -1, 41, 52, 42, -1, 11, 12, + 36, -1, 5, -1, 4, -1, 6, -1, 7, -1, + 8, -1, 5, -1, 4, -1, 6, -1, 7, -1, + 8, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 273, 273, 274, 278, 285, 293, 302, 303, 307, - 308, 312, 313, 314, 315, 319, 320, 324, 325, 326, - 330, 331, 332, 333, 334, 335, 339, 340, 341, 342, - 343, 344, 348, 349, 350, 351, 352, 353, 357, 361, - 362, 363, 364, 365, 369, 370, 371, 372, 373 + 0, 276, 276, 277, 281, 288, 296, 305, 306, 310, + 311, 315, 316, 317, 318, 322, 323, 327, 328, 329, + 333, 334, 335, 336, 337, 338, 342, 343, 344, 345, + 346, 347, 351, 352, 353, 354, 355, 356, 357, 361, + 365, 366, 367, 368, 369, 373, 374, 375, 376, 377 }; #endif @@ -738,8 +742,8 @@ static const yytype_uint8 yyr1[] = 0, 43, 44, 44, 45, 45, 45, 45, 45, 46, 46, 47, 47, 47, 47, 48, 48, 49, 49, 49, 50, 50, 50, 50, 50, 50, 51, 51, 51, 51, - 51, 51, 52, 52, 52, 52, 52, 52, 53, 54, - 54, 54, 54, 54, 55, 55, 55, 55, 55 + 51, 51, 52, 52, 52, 52, 52, 52, 52, 53, + 54, 54, 54, 54, 54, 55, 55, 55, 55, 55 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ @@ -748,8 +752,8 @@ static const yytype_uint8 yyr2[] = 0, 2, 2, 0, 3, 3, 5, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 2, 2, 0, 1, 1, 3, 2, 2, 4, 1, 1, 3, 2, - 2, 4, 1, 3, 3, 2, 2, 3, 3, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1 + 2, 4, 1, 3, 3, 3, 2, 2, 3, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state @@ -757,13 +761,14 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 1, 10, 7, 16, 8, 2, 40, 39, - 41, 42, 43, 0, 19, 0, 9, 20, 21, 0, - 45, 44, 46, 47, 48, 19, 0, 15, 26, 27, + 3, 0, 1, 10, 7, 16, 8, 2, 41, 40, + 42, 43, 44, 0, 19, 0, 9, 20, 21, 0, + 46, 45, 47, 48, 49, 19, 0, 15, 26, 27, 0, 0, 4, 19, 23, 24, 12, 13, 14, 0, 0, 0, 5, 32, 11, 0, 0, 19, 29, 30, - 38, 18, 22, 17, 0, 35, 36, 0, 0, 0, - 28, 0, 0, 25, 37, 33, 34, 6, 31 + 39, 18, 22, 17, 0, 36, 37, 0, 0, 0, + 0, 28, 0, 0, 25, 38, 35, 33, 34, 6, + 31 }; /* YYDEFGOTO[NTERM-NUM]. */ @@ -775,23 +780,24 @@ static const yytype_int8 yydefgoto[] = /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ -#define YYPACT_NINF -36 +#define YYPACT_NINF -29 static const yytype_int8 yypact[] = { - -36, 93, -36, 39, -5, 65, -36, -36, -36, -36, - -36, -36, -36, 8, -36, -18, 73, -36, -36, 0, - -36, -36, -36, -36, -36, -36, -15, 84, -36, -36, - -9, 41, -36, -36, -36, -36, -36, -36, -36, 27, - 27, 27, -36, 84, -35, 42, 12, -36, -36, -36, - -36, -36, -36, -36, 54, -36, -36, 45, 27, 27, - -36, 0, 86, -36, -36, -36, -36, -36, -36 + -29, 94, -29, 48, -15, 66, -29, -29, -29, -29, + -29, -29, -29, -2, -29, -28, 74, -29, -29, 0, + -29, -29, -29, -29, -29, -29, -21, 85, -29, -29, + 1, 54, -29, -29, -29, -29, -29, -29, -29, 27, + 27, 27, -29, 85, 24, 87, 12, -29, -29, -29, + -29, -29, -29, -29, 88, -29, -29, -20, 27, 27, + 27, -29, 0, 100, -29, -29, -29, -29, -29, -29, + -29 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -36, -36, -36, -36, -12, -36, -24, -36, 51, -22, - -3, 48, -17 + -29, -29, -29, -29, -19, -29, -24, -29, 44, -14, + -3, 34, -7 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -801,32 +807,36 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 17, 45, 58, 59, 20, 21, 22, 23, 24, 54, - 49, 13, 19, 34, 36, 37, 38, 55, 56, 57, - 30, 25, 32, 62, 48, 46, 49, 50, 53, 61, - 39, 20, 21, 22, 23, 24, 65, 66, 13, 40, - 48, 41, 53, 8, 9, 10, 11, 12, 25, 67, - 13, 53, 13, 13, 51, 51, 27, 39, 0, 53, - 14, 0, 52, 60, 35, 13, 40, 51, 41, 20, - 21, 22, 23, 24, 0, 63, 13, 8, 9, 10, - 11, 12, 58, 59, 13, 0, 25, 64, 20, 21, - 22, 23, 24, 2, 33, 13, 3, 13, 0, 51, - 0, 0, 4, 5, 0, 47, 0, 68, 0, 6 + 17, 45, 19, 58, 20, 21, 22, 23, 24, 54, + 30, 13, 32, 34, 36, 37, 38, 59, 60, 46, + 49, 25, 65, 63, 48, 55, 56, 57, 53, 62, + 39, 20, 21, 22, 23, 24, 49, 50, 13, 40, + 48, 41, 53, 69, 66, 67, 68, 58, 25, 27, + 35, 53, 8, 9, 10, 11, 12, 39, 0, 13, + 53, 59, 60, 0, 0, 13, 40, 51, 41, 14, + 20, 21, 22, 23, 24, 52, 0, 13, 8, 9, + 10, 11, 12, 0, 0, 13, 0, 25, 0, 20, + 21, 22, 23, 24, 2, 33, 13, 3, 13, 13, + 51, 51, 0, 4, 5, 0, 47, 0, 61, 64, + 6, 13, 0, 51, 0, 0, 0, 0, 0, 0, + 0, 70 }; static const yytype_int8 yycheck[] = { - 3, 25, 37, 38, 4, 5, 6, 7, 8, 33, - 27, 11, 17, 16, 14, 15, 16, 39, 40, 41, - 12, 21, 40, 47, 27, 40, 43, 36, 31, 17, - 30, 4, 5, 6, 7, 8, 58, 59, 11, 39, - 43, 41, 45, 4, 5, 6, 7, 8, 21, 61, - 11, 54, 11, 11, 13, 13, 5, 30, -1, 62, - 21, -1, 21, 21, 16, 11, 39, 13, 41, 4, - 5, 6, 7, 8, -1, 21, 11, 4, 5, 6, - 7, 8, 37, 38, 11, -1, 21, 42, 4, 5, - 6, 7, 8, 0, 21, 11, 3, 11, -1, 13, - -1, -1, 9, 10, -1, 21, -1, 21, -1, 16 + 3, 25, 17, 23, 4, 5, 6, 7, 8, 33, + 12, 11, 40, 16, 14, 15, 16, 37, 38, 40, + 27, 21, 42, 47, 27, 39, 40, 41, 31, 17, + 30, 4, 5, 6, 7, 8, 43, 36, 11, 39, + 43, 41, 45, 62, 58, 59, 60, 23, 21, 5, + 16, 54, 4, 5, 6, 7, 8, 30, -1, 11, + 63, 37, 38, -1, -1, 11, 39, 13, 41, 21, + 4, 5, 6, 7, 8, 21, -1, 11, 4, 5, + 6, 7, 8, -1, -1, 11, -1, 21, -1, 4, + 5, 6, 7, 8, 0, 21, 11, 3, 11, 11, + 13, 13, -1, 9, 10, -1, 21, -1, 21, 21, + 16, 11, -1, 13, -1, -1, -1, -1, -1, -1, + -1, 21 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -838,8 +848,9 @@ static const yytype_uint8 yystos[] = 4, 5, 6, 7, 8, 21, 48, 51, 53, 55, 12, 49, 40, 21, 53, 54, 14, 15, 16, 30, 39, 41, 47, 51, 52, 49, 40, 21, 53, 55, - 36, 13, 21, 53, 49, 52, 52, 52, 37, 38, - 21, 17, 49, 21, 42, 52, 52, 47, 21 + 36, 13, 21, 53, 49, 52, 52, 52, 23, 37, + 38, 21, 17, 49, 21, 42, 52, 52, 52, 47, + 21 }; #define yyerrok (yyerrstatus = 0) @@ -1822,71 +1833,76 @@ yyreduce: case 35: - { zend_ini_do_op('~', &(yyval), &(yyvsp[(2) - (2)]), NULL); } + { zend_ini_do_op('^', &(yyval), &(yyvsp[(1) - (3)]), &(yyvsp[(3) - (3)])); } break; case 36: - { zend_ini_do_op('!', &(yyval), &(yyvsp[(2) - (2)]), NULL); } + { zend_ini_do_op('~', &(yyval), &(yyvsp[(2) - (2)]), NULL); } break; case 37: - { (yyval) = (yyvsp[(2) - (3)]); } + { zend_ini_do_op('!', &(yyval), &(yyvsp[(2) - (2)]), NULL); } break; case 38: - { zend_ini_get_var(&(yyval), &(yyvsp[(2) - (3)]) TSRMLS_CC); free(Z_STRVAL((yyvsp[(2) - (3)]))); } + { (yyval) = (yyvsp[(2) - (3)]); } break; case 39: - { (yyval) = (yyvsp[(1) - (1)]); } + { zend_ini_get_var(&(yyval), &(yyvsp[(2) - (3)]) TSRMLS_CC); free(Z_STRVAL((yyvsp[(2) - (3)]))); } break; case 40: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ } + { (yyval) = (yyvsp[(1) - (1)]); } break; case 41: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ } + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ } break; case 42: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ } + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ } break; case 43: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ } + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ } break; case 44: - { zend_ini_get_constant(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); } + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ } break; case 45: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ } + { zend_ini_get_constant(&(yyval), &(yyvsp[(1) - (1)]) TSRMLS_CC); } break; case 46: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ } + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_RAW: '%s'\n", Z_STRVAL($1));*/ } break; case 47: - { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ } + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_NUMBER: '%s'\n", Z_STRVAL($1));*/ } break; case 48: + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_STRING: '%s'\n", Z_STRVAL($1));*/ } + break; + + case 49: + { (yyval) = (yyvsp[(1) - (1)]); /*printf("TC_WHITESPACE: '%s'\n", Z_STRVAL($1));*/ } break; diff --git a/Zend/zend_ini_parser.output b/Zend/zend_ini_parser.output index fc6468a7f..cfd6dd4af 100644 --- a/Zend/zend_ini_parser.output +++ b/Zend/zend_ini_parser.output @@ -4,7 +4,6 @@ Terminals unused in grammar ',' '.' '\'' - '^' '+' '-' '/' @@ -63,36 +62,37 @@ Grammar 31 expr: var_string_list 32 | expr '|' expr 33 | expr '&' expr - 34 | '~' expr - 35 | '!' expr - 36 | '(' expr ')' + 34 | expr '^' expr + 35 | '~' expr + 36 | '!' expr + 37 | '(' expr ')' - 37 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}' + 38 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}' - 38 constant_literal: TC_CONSTANT - 39 | TC_RAW - 40 | TC_NUMBER - 41 | TC_STRING - 42 | TC_WHITESPACE + 39 constant_literal: TC_CONSTANT + 40 | TC_RAW + 41 | TC_NUMBER + 42 | TC_STRING + 43 | TC_WHITESPACE - 43 constant_string: TC_CONSTANT - 44 | TC_RAW - 45 | TC_NUMBER - 46 | TC_STRING - 47 | TC_WHITESPACE + 44 constant_string: TC_CONSTANT + 45 | TC_RAW + 46 | TC_NUMBER + 47 | TC_STRING + 48 | TC_WHITESPACE Terminals, with rules where they appear $end (0) 0 -'!' (33) 35 +'!' (33) 36 '"' (34) 21 24 27 30 '$' (36) '%' (37) '&' (38) 33 '\'' (39) -'(' (40) 36 -')' (41) 36 +'(' (40) 37 +')' (41) 37 '*' (42) '+' (43) ',' (44) @@ -106,22 +106,22 @@ $end (0) 0 '?' (63) '@' (64) ']' (93) 3 5 -'^' (94) +'^' (94) 34 '{' (123) '|' (124) 32 -'}' (125) 37 -'~' (126) 34 +'}' (125) 38 +'~' (126) 35 error (256) TC_SECTION (258) 3 -TC_RAW (259) 39 44 -TC_CONSTANT (260) 38 43 -TC_NUMBER (261) 40 45 -TC_STRING (262) 41 46 -TC_WHITESPACE (263) 42 47 +TC_RAW (259) 40 45 +TC_CONSTANT (260) 39 44 +TC_NUMBER (261) 41 46 +TC_STRING (262) 42 47 +TC_WHITESPACE (263) 43 48 TC_LABEL (264) 4 6 TC_OFFSET (265) 5 -TC_DOLLAR_CURLY (266) 37 -TC_VARNAME (267) 37 +TC_DOLLAR_CURLY (266) 38 +TC_VARNAME (267) 38 TC_QUOTED_STRING (268) 17 BOOL_TRUE (269) 11 BOOL_FALSE (270) 12 @@ -149,13 +149,13 @@ var_string_list_section (50) var_string_list (51) on left: 25 26 27 28 29 30, on right: 14 28 29 30 31 expr (52) - on left: 31 32 33 34 35 36, on right: 10 32 33 34 35 36 + on left: 31 32 33 34 35 36 37, on right: 10 32 33 34 35 36 37 cfg_var_ref (53) - on left: 37, on right: 16 19 22 25 28 + on left: 38, on right: 16 19 22 25 28 constant_literal (54) - on left: 38 39 40 41 42, on right: 20 23 + on left: 39 40 41 42 43, on right: 20 23 constant_string (55) - on left: 43 44 45 46 47, on right: 26 29 + on left: 44 45 46 47 48, on right: 26 29 state 0 @@ -254,42 +254,42 @@ state 7 state 8 - 39 constant_literal: TC_RAW . + 40 constant_literal: TC_RAW . - $default reduce using rule 39 (constant_literal) + $default reduce using rule 40 (constant_literal) state 9 - 38 constant_literal: TC_CONSTANT . + 39 constant_literal: TC_CONSTANT . - $default reduce using rule 38 (constant_literal) + $default reduce using rule 39 (constant_literal) state 10 - 40 constant_literal: TC_NUMBER . + 41 constant_literal: TC_NUMBER . - $default reduce using rule 40 (constant_literal) + $default reduce using rule 41 (constant_literal) state 11 - 41 constant_literal: TC_STRING . + 42 constant_literal: TC_STRING . - $default reduce using rule 41 (constant_literal) + $default reduce using rule 42 (constant_literal) state 12 - 42 constant_literal: TC_WHITESPACE . + 43 constant_literal: TC_WHITESPACE . - $default reduce using rule 42 (constant_literal) + $default reduce using rule 43 (constant_literal) state 13 - 37 cfg_var_ref: TC_DOLLAR_CURLY . TC_VARNAME '}' + 38 cfg_var_ref: TC_DOLLAR_CURLY . TC_VARNAME '}' TC_VARNAME shift, and go to state 30 @@ -372,37 +372,37 @@ state 19 state 20 - 44 constant_string: TC_RAW . + 45 constant_string: TC_RAW . - $default reduce using rule 44 (constant_string) + $default reduce using rule 45 (constant_string) state 21 - 43 constant_string: TC_CONSTANT . + 44 constant_string: TC_CONSTANT . - $default reduce using rule 43 (constant_string) + $default reduce using rule 44 (constant_string) state 22 - 45 constant_string: TC_NUMBER . + 46 constant_string: TC_NUMBER . - $default reduce using rule 45 (constant_string) + $default reduce using rule 46 (constant_string) state 23 - 46 constant_string: TC_STRING . + 47 constant_string: TC_STRING . - $default reduce using rule 46 (constant_string) + $default reduce using rule 47 (constant_string) state 24 - 47 constant_string: TC_WHITESPACE . + 48 constant_string: TC_WHITESPACE . - $default reduce using rule 47 (constant_string) + $default reduce using rule 48 (constant_string) state 25 @@ -458,7 +458,7 @@ state 29 state 30 - 37 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME . '}' + 38 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME . '}' '}' shift, and go to state 50 @@ -529,7 +529,7 @@ state 38 state 39 - 34 expr: '~' . expr + 35 expr: '~' . expr TC_RAW shift, and go to state 20 TC_CONSTANT shift, and go to state 21 @@ -550,7 +550,7 @@ state 39 state 40 - 35 expr: '!' . expr + 36 expr: '!' . expr TC_RAW shift, and go to state 20 TC_CONSTANT shift, and go to state 21 @@ -571,7 +571,7 @@ state 40 state 41 - 36 expr: '(' . expr ')' + 37 expr: '(' . expr ')' TC_RAW shift, and go to state 20 TC_CONSTANT shift, and go to state 21 @@ -623,9 +623,11 @@ state 44 10 string_or_value: expr . 32 expr: expr . '|' expr 33 | expr . '&' expr + 34 | expr . '^' expr - '|' shift, and go to state 58 - '&' shift, and go to state 59 + '^' shift, and go to state 58 + '|' shift, and go to state 59 + '&' shift, and go to state 60 $default reduce using rule 10 (string_or_value) @@ -638,7 +640,7 @@ state 45 TC_DOLLAR_CURLY shift, and go to state 13 TC_QUOTED_STRING shift, and go to state 51 - '"' shift, and go to state 60 + '"' shift, and go to state 61 cfg_var_ref go to state 53 @@ -647,7 +649,7 @@ state 46 5 statement: TC_OFFSET option_offset ']' . '=' string_or_value - '=' shift, and go to state 61 + '=' shift, and go to state 62 state 47 @@ -656,7 +658,7 @@ state 47 $default reduce using rule 18 (encapsed_list) - encapsed_list go to state 62 + encapsed_list go to state 63 state 48 @@ -675,9 +677,9 @@ state 49 state 50 - 37 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}' . + 38 cfg_var_ref: TC_DOLLAR_CURLY TC_VARNAME '}' . - $default reduce using rule 37 (cfg_var_ref) + $default reduce using rule 38 (cfg_var_ref) state 51 @@ -709,7 +711,7 @@ state 54 TC_DOLLAR_CURLY shift, and go to state 13 TC_QUOTED_STRING shift, and go to state 51 - '"' shift, and go to state 63 + '"' shift, and go to state 64 cfg_var_ref go to state 53 @@ -718,34 +720,38 @@ state 55 32 expr: expr . '|' expr 33 | expr . '&' expr - 34 | '~' expr . + 34 | expr . '^' expr + 35 | '~' expr . - $default reduce using rule 34 (expr) + $default reduce using rule 35 (expr) state 56 32 expr: expr . '|' expr 33 | expr . '&' expr - 35 | '!' expr . + 34 | expr . '^' expr + 36 | '!' expr . - $default reduce using rule 35 (expr) + $default reduce using rule 36 (expr) state 57 32 expr: expr . '|' expr 33 | expr . '&' expr - 36 | '(' expr . ')' + 34 | expr . '^' expr + 37 | '(' expr . ')' - '|' shift, and go to state 58 - '&' shift, and go to state 59 - ')' shift, and go to state 64 + '^' shift, and go to state 58 + '|' shift, and go to state 59 + '&' shift, and go to state 60 + ')' shift, and go to state 65 state 58 - 32 expr: expr '|' . expr + 34 expr: expr '^' . expr TC_RAW shift, and go to state 20 TC_CONSTANT shift, and go to state 21 @@ -759,14 +765,14 @@ state 58 '(' shift, and go to state 41 var_string_list go to state 43 - expr go to state 65 + expr go to state 66 cfg_var_ref go to state 28 constant_string go to state 29 state 59 - 33 expr: expr '&' . expr + 32 expr: expr '|' . expr TC_RAW shift, and go to state 20 TC_CONSTANT shift, and go to state 21 @@ -780,19 +786,40 @@ state 59 '(' shift, and go to state 41 var_string_list go to state 43 - expr go to state 66 + expr go to state 67 cfg_var_ref go to state 28 constant_string go to state 29 state 60 + 33 expr: expr '&' . expr + + TC_RAW shift, and go to state 20 + TC_CONSTANT shift, and go to state 21 + TC_NUMBER shift, and go to state 22 + TC_STRING shift, and go to state 23 + TC_WHITESPACE shift, and go to state 24 + TC_DOLLAR_CURLY shift, and go to state 13 + '"' shift, and go to state 25 + '~' shift, and go to state 39 + '!' shift, and go to state 40 + '(' shift, and go to state 41 + + var_string_list go to state 43 + expr go to state 68 + cfg_var_ref go to state 28 + constant_string go to state 29 + + +state 61 + 27 var_string_list: '"' encapsed_list '"' . $default reduce using rule 27 (var_string_list) -state 61 +state 62 5 statement: TC_OFFSET option_offset ']' '=' . string_or_value @@ -810,14 +837,14 @@ state 61 '!' shift, and go to state 40 '(' shift, and go to state 41 - string_or_value go to state 67 + string_or_value go to state 69 var_string_list go to state 43 expr go to state 44 cfg_var_ref go to state 28 constant_string go to state 29 -state 62 +state 63 16 encapsed_list: encapsed_list . cfg_var_ref 17 | encapsed_list . TC_QUOTED_STRING @@ -825,51 +852,63 @@ state 62 TC_DOLLAR_CURLY shift, and go to state 13 TC_QUOTED_STRING shift, and go to state 51 - '"' shift, and go to state 68 + '"' shift, and go to state 70 cfg_var_ref go to state 53 -state 63 +state 64 24 var_string_list_section: var_string_list_section '"' encapsed_list '"' . $default reduce using rule 24 (var_string_list_section) -state 64 +state 65 - 36 expr: '(' expr ')' . + 37 expr: '(' expr ')' . - $default reduce using rule 36 (expr) + $default reduce using rule 37 (expr) -state 65 +state 66 + + 32 expr: expr . '|' expr + 33 | expr . '&' expr + 34 | expr . '^' expr + 34 | expr '^' expr . + + $default reduce using rule 34 (expr) + + +state 67 32 expr: expr . '|' expr 32 | expr '|' expr . 33 | expr . '&' expr + 34 | expr . '^' expr $default reduce using rule 32 (expr) -state 66 +state 68 32 expr: expr . '|' expr 33 | expr . '&' expr 33 | expr '&' expr . + 34 | expr . '^' expr $default reduce using rule 33 (expr) -state 67 +state 69 5 statement: TC_OFFSET option_offset ']' '=' string_or_value . $default reduce using rule 5 (statement) -state 68 +state 70 30 var_string_list: var_string_list '"' encapsed_list '"' . diff --git a/Zend/zend_ini_parser.y b/Zend/zend_ini_parser.y index 2d428c3fe..901babad6 100644 --- a/Zend/zend_ini_parser.y +++ b/Zend/zend_ini_parser.y @@ -67,6 +67,9 @@ static void zend_ini_do_op(char type, zval *result, zval *op1, zval *op2) case '&': i_result = i_op1 & i_op2; break; + case '^': + i_result = i_op1 ^ i_op2; + break; case '~': i_result = ~i_op1; break; @@ -264,7 +267,7 @@ ZEND_API int zend_parse_ini_string(char *str, zend_bool unbuffered_errors, int s %token BOOL_FALSE %token END_OF_LINE %token '=' ':' ',' '.' '"' '\'' '^' '+' '-' '/' '*' '%' '$' '~' '<' '>' '?' '@' '{' '}' -%left '|' '&' +%left '|' '&' '^' %right '~' '!' %% @@ -348,6 +351,7 @@ expr: var_string_list { $$ = $1; } | expr '|' expr { zend_ini_do_op('|', &$$, &$1, &$3); } | expr '&' expr { zend_ini_do_op('&', &$$, &$1, &$3); } + | expr '^' expr { zend_ini_do_op('^', &$$, &$1, &$3); } | '~' expr { zend_ini_do_op('~', &$$, &$2, NULL); } | '!' expr { zend_ini_do_op('!', &$$, &$2, NULL); } | '(' expr ')' { $$ = $2; } diff --git a/Zend/zend_ini_scanner.c b/Zend/zend_ini_scanner.c index 35d9763bd..87ba66431 100644 --- a/Zend/zend_ini_scanner.c +++ b/Zend/zend_ini_scanner.c @@ -381,7 +381,7 @@ yyc_INITIAL: 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, - 144, 144, 144, 128, 144, 144, 144, 144, + 144, 144, 144, 128, 144, 144, 128, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, 144, @@ -419,6 +419,7 @@ yyc_INITIAL: case '&': case '(': case ')': + case '^': case '{': case '|': case '}': @@ -437,8 +438,7 @@ yyc_INITIAL: case '>': case '?': case '@': - case ']': - case '^': goto yy13; + case ']': goto yy13; case ';': goto yy14; case '=': goto yy16; case 'F': @@ -695,35 +695,33 @@ yy31: if (yybm[0+yych] & 64) { goto yy31; } - if (yych <= '&') { - if (yych <= '\r') { - if (yych <= '\t') { + if (yych <= '\'') { + if (yych <= ' ') { + if (yych <= '\n') { if (yych <= 0x08) goto yy25; - goto yy34; + if (yych <= '\t') goto yy34; } else { - if (yych <= '\n') goto yy33; - if (yych <= '\f') goto yy25; + if (yych != '\r') goto yy25; } } else { - if (yych <= '#') { - if (yych <= ' ') goto yy25; - if (yych >= '#') goto yy25; + if (yych <= '$') { + if (yych == '#') goto yy25; } else { - if (yych == '%') goto yy25; + if (yych != '&') goto yy25; } } } else { - if (yych <= '<') { - if (yych <= ')') { - if (yych <= '\'') goto yy25; + if (yych <= 'Z') { + if (yych <= ';') { + if (yych <= ')') goto yy33; + if (yych <= ':') goto yy25; } else { - if (yych != ';') goto yy25; + if (yych != '=') goto yy25; } } else { - if (yych <= '[') { - if (yych <= '=') goto yy33; - if (yych <= 'Z') goto yy25; - goto yy28; + if (yych <= '^') { + if (yych <= '[') goto yy28; + if (yych <= ']') goto yy25; } else { if (yych <= 'z') goto yy25; if (yych >= 0x7F) goto yy25; @@ -737,7 +735,7 @@ yy33: { /* TRUE value (when used outside option value/offset this causes parse error!) */ RETURN_TOKEN(BOOL_TRUE, "1", 1); } -#line 741 "Zend/zend_ini_scanner.c" +#line 739 "Zend/zend_ini_scanner.c" yy34: YYDEBUG(34, *YYCURSOR); ++YYCURSOR; @@ -769,36 +767,36 @@ yy39: YYFILL(1); yych = *YYCURSOR; YYDEBUG(40, *YYCURSOR); - if (yych <= '%') { - if (yych <= '\r') { - if (yych <= '\t') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= '\n') { if (yych <= 0x08) goto yy25; - goto yy42; + if (yych <= '\t') goto yy42; } else { - if (yych <= '\n') goto yy41; - if (yych <= '\f') goto yy25; + if (yych != '\r') goto yy25; } } else { - if (yych <= '"') { - if (yych <= 0x1F) goto yy25; + if (yych <= '#') { if (yych <= ' ') goto yy39; + if (yych >= '#') goto yy25; } else { - if (yych != '$') goto yy25; + if (yych == '%') goto yy25; } } } else { - if (yych <= '<') { - if (yych <= ')') { - if (yych == '\'') goto yy25; + if (yych <= '=') { + if (yych <= ':') { + if (yych <= '\'') goto yy25; + if (yych >= '*') goto yy25; } else { - if (yych != ';') goto yy25; + if (yych == '<') goto yy25; } } else { - if (yych <= '[') { - if (yych <= '=') goto yy41; - if (yych <= 'Z') goto yy25; - goto yy28; + if (yych <= ']') { + if (yych == '[') goto yy28; + goto yy25; } else { + if (yych <= '^') goto yy41; if (yych <= 'z') goto yy25; if (yych >= 0x7F) goto yy25; } @@ -811,7 +809,7 @@ yy41: { /* FALSE value (when used outside option value/offset this causes parse error!)*/ RETURN_TOKEN(BOOL_FALSE, "", 0); } -#line 815 "Zend/zend_ini_scanner.c" +#line 813 "Zend/zend_ini_scanner.c" yy42: YYDEBUG(42, *YYCURSOR); ++YYCURSOR; @@ -824,7 +822,7 @@ yy42: yy44: YYDEBUG(44, *YYCURSOR); yych = *++YYCURSOR; - if (yych <= '&') { + if (yych <= '\'') { if (yych <= 0x1F) { if (yych <= '\n') { if (yych <= 0x08) goto yy26; @@ -841,22 +839,24 @@ yy44: goto yy26; } else { if (yych == '%') goto yy26; - goto yy41; + if (yych <= '&') goto yy41; + goto yy26; } } } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych <= '\'') goto yy26; + if (yych <= 'N') { + if (yych <= ';') { if (yych <= ')') goto yy41; - goto yy26; - } else { - if (yych == '<') goto yy26; + if (yych <= ':') goto yy26; goto yy41; + } else { + if (yych == '=') goto yy41; + if (yych <= 'M') goto yy26; + goto yy47; } } else { if (yych <= 'm') { - if (yych == 'N') goto yy47; + if (yych == '^') goto yy41; goto yy26; } else { if (yych <= 'n') goto yy47; @@ -946,35 +946,34 @@ yy58: yych = *YYCURSOR; yy59: YYDEBUG(59, *YYCURSOR); - if (yych <= '&') { - if (yych <= '\r') { - if (yych <= '\t') { + if (yych <= '\'') { + if (yych <= ' ') { + if (yych <= '\n') { if (yych <= 0x08) goto yy58; + if (yych >= '\n') goto yy64; } else { - if (yych <= '\n') goto yy64; - if (yych <= '\f') goto yy58; - goto yy66; + if (yych == '\r') goto yy66; + goto yy58; } } else { - if (yych <= '#') { - if (yych <= ' ') goto yy58; - if (yych >= '#') goto yy58; + if (yych <= '$') { + if (yych == '#') goto yy58; } else { - if (yych == '%') goto yy58; + if (yych != '&') goto yy58; } } } else { - if (yych <= '<') { - if (yych <= ')') { - if (yych <= '\'') goto yy58; + if (yych <= 'Z') { + if (yych <= ';') { + if (yych <= ')') goto yy60; + if (yych <= ':') goto yy58; } else { - if (yych != ';') goto yy58; + if (yych != '=') goto yy58; } } else { - if (yych <= '[') { - if (yych <= '=') goto yy60; - if (yych <= 'Z') goto yy58; - goto yy62; + if (yych <= '^') { + if (yych <= '[') goto yy62; + if (yych <= ']') goto yy58; } else { if (yych <= 'z') goto yy58; if (yych >= 0x7F) goto yy58; @@ -1019,7 +1018,7 @@ yy65: SCNG(lineno)++; return END_OF_LINE; } -#line 1023 "Zend/zend_ini_scanner.c" +#line 1022 "Zend/zend_ini_scanner.c" yy66: YYDEBUG(66, *YYCURSOR); yych = *++YYCURSOR; @@ -1060,42 +1059,42 @@ yy69: YYFILL(2); yych = *YYCURSOR; YYDEBUG(70, *YYCURSOR); - if (yych <= '%') { - if (yych <= '\r') { - if (yych <= '\t') { + if (yych <= '&') { + if (yych <= 0x1F) { + if (yych <= '\n') { if (yych <= 0x08) goto yy25; - goto yy67; + if (yych <= '\t') goto yy67; } else { - if (yych <= '\n') goto yy71; - if (yych <= '\f') goto yy25; - goto yy72; + if (yych == '\r') goto yy72; + goto yy25; } } else { - if (yych <= '"') { - if (yych <= 0x1F) goto yy25; + if (yych <= '#') { if (yych <= ' ') goto yy69; - goto yy3; + if (yych <= '"') goto yy3; + goto yy58; } else { - if (yych <= '#') goto yy58; - if (yych <= '$') goto yy3; - goto yy25; + if (yych == '%') goto yy25; + goto yy3; } } } else { - if (yych <= '<') { - if (yych <= ')') { - if (yych == '\'') goto yy25; - goto yy3; - } else { - if (yych == ';') goto yy53; + if (yych <= '=') { + if (yych <= ':') { + if (yych <= '\'') goto yy25; + if (yych <= ')') goto yy3; goto yy25; + } else { + if (yych <= ';') goto yy53; + if (yych <= '<') goto yy25; + goto yy51; } } else { - if (yych <= '[') { - if (yych <= '=') goto yy51; - if (yych <= 'Z') goto yy25; - goto yy28; + if (yych <= ']') { + if (yych == '[') goto yy28; + goto yy25; } else { + if (yych <= '^') goto yy3; if (yych <= 'z') goto yy25; if (yych <= '~') goto yy3; goto yy25; @@ -1195,7 +1194,7 @@ yy76: zend_ini_escape_string(ini_lval, yytext, yyleng, '"' TSRMLS_CC); return TC_QUOTED_STRING; } -#line 1199 "Zend/zend_ini_scanner.c" +#line 1198 "Zend/zend_ini_scanner.c" yy77: YYDEBUG(77, *YYCURSOR); ++YYCURSOR; @@ -1209,7 +1208,7 @@ yy78: yy_pop_state(TSRMLS_C); return '"'; } -#line 1213 "Zend/zend_ini_scanner.c" +#line 1212 "Zend/zend_ini_scanner.c" yy79: YYDEBUG(79, *YYCURSOR); yych = *++YYCURSOR; @@ -1223,7 +1222,7 @@ yy79: yy_push_state(ST_VARNAME TSRMLS_CC); return TC_DOLLAR_CURLY; } -#line 1227 "Zend/zend_ini_scanner.c" +#line 1226 "Zend/zend_ini_scanner.c" yy82: YYDEBUG(82, *YYCURSOR); ++YYCURSOR; @@ -1327,7 +1326,7 @@ yy87: { /* Get rest as section/offset value */ RETURN_TOKEN(TC_STRING, yytext, yyleng); } -#line 1331 "Zend/zend_ini_scanner.c" +#line 1330 "Zend/zend_ini_scanner.c" yy88: YYDEBUG(88, *YYCURSOR); yyaccept = 0; @@ -1348,7 +1347,7 @@ yy90: { return 0; } -#line 1352 "Zend/zend_ini_scanner.c" +#line 1351 "Zend/zend_ini_scanner.c" yy91: YYDEBUG(91, *YYCURSOR); ++YYCURSOR; @@ -1360,7 +1359,7 @@ yy92: yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); return '"'; } -#line 1364 "Zend/zend_ini_scanner.c" +#line 1363 "Zend/zend_ini_scanner.c" yy93: YYDEBUG(93, *YYCURSOR); yych = *++YYCURSOR; @@ -1426,7 +1425,7 @@ yy98: { /* Get number option value as string */ RETURN_TOKEN(TC_NUMBER, yytext, yyleng); } -#line 1430 "Zend/zend_ini_scanner.c" +#line 1429 "Zend/zend_ini_scanner.c" yy99: YYDEBUG(99, *YYCURSOR); yyaccept = 3; @@ -1456,7 +1455,7 @@ yy100: { /* Get constant option value */ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); } -#line 1460 "Zend/zend_ini_scanner.c" +#line 1459 "Zend/zend_ini_scanner.c" yy101: YYDEBUG(101, *YYCURSOR); yych = *++YYCURSOR; @@ -1472,7 +1471,7 @@ yy103: BEGIN(INITIAL); return ']'; } -#line 1476 "Zend/zend_ini_scanner.c" +#line 1475 "Zend/zend_ini_scanner.c" yy104: YYDEBUG(104, *YYCURSOR); yyaccept = 0; @@ -1771,7 +1770,7 @@ yy125: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 1775 "Zend/zend_ini_scanner.c" +#line 1774 "Zend/zend_ini_scanner.c" yy129: YYDEBUG(129, *YYCURSOR); ++YYCURSOR; @@ -1782,7 +1781,7 @@ yy129: yy_push_state(ST_VARNAME TSRMLS_CC); return TC_DOLLAR_CURLY; } -#line 1786 "Zend/zend_ini_scanner.c" +#line 1785 "Zend/zend_ini_scanner.c" yy131: YYDEBUG(131, *YYCURSOR); yyaccept = 0; @@ -1892,7 +1891,7 @@ yyc_ST_RAW: BEGIN(INITIAL); return END_OF_LINE; } -#line 1896 "Zend/zend_ini_scanner.c" +#line 1895 "Zend/zend_ini_scanner.c" yy139: YYDEBUG(139, *YYCURSOR); ++YYCURSOR; @@ -1936,7 +1935,7 @@ end_raw_value_chars: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 1940 "Zend/zend_ini_scanner.c" +#line 1939 "Zend/zend_ini_scanner.c" yy141: YYDEBUG(141, *YYCURSOR); yyaccept = 0; @@ -1967,7 +1966,7 @@ yy143: SCNG(lineno)++; return END_OF_LINE; } -#line 1971 "Zend/zend_ini_scanner.c" +#line 1970 "Zend/zend_ini_scanner.c" yy144: YYDEBUG(144, *YYCURSOR); yych = *++YYCURSOR; @@ -2001,7 +2000,7 @@ yy149: SCNG(lineno)++; return END_OF_LINE; } -#line 2005 "Zend/zend_ini_scanner.c" +#line 2004 "Zend/zend_ini_scanner.c" yy150: YYDEBUG(150, *YYCURSOR); yych = *++YYCURSOR; @@ -2035,7 +2034,7 @@ yy153: /* eat whitespace */ goto restart; } -#line 2039 "Zend/zend_ini_scanner.c" +#line 2038 "Zend/zend_ini_scanner.c" yy155: YYDEBUG(155, *YYCURSOR); ++YYCURSOR; @@ -2099,7 +2098,7 @@ yy159: { /* Raw value, only used when SCNG(scanner_mode) == ZEND_INI_SCANNER_RAW. */ RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 2103 "Zend/zend_ini_scanner.c" +#line 2102 "Zend/zend_ini_scanner.c" yy160: YYDEBUG(160, *YYCURSOR); ++YYCURSOR; @@ -2109,7 +2108,7 @@ yy160: { return 0; } -#line 2113 "Zend/zend_ini_scanner.c" +#line 2112 "Zend/zend_ini_scanner.c" yy162: YYDEBUG(162, *YYCURSOR); ++YYCURSOR; @@ -2124,7 +2123,7 @@ yy163: SCNG(lineno)++; return ']'; } -#line 2128 "Zend/zend_ini_scanner.c" +#line 2127 "Zend/zend_ini_scanner.c" yy164: YYDEBUG(164, *YYCURSOR); ++YYCURSOR; @@ -2250,7 +2249,7 @@ yy173: { /* Get rest as section/offset value */ RETURN_TOKEN(TC_STRING, yytext, yyleng); } -#line 2254 "Zend/zend_ini_scanner.c" +#line 2253 "Zend/zend_ini_scanner.c" yy174: YYDEBUG(174, *YYCURSOR); yyaccept = 0; @@ -2273,7 +2272,7 @@ yy176: { return 0; } -#line 2277 "Zend/zend_ini_scanner.c" +#line 2276 "Zend/zend_ini_scanner.c" yy177: YYDEBUG(177, *YYCURSOR); ++YYCURSOR; @@ -2285,7 +2284,7 @@ yy178: yy_push_state(ST_DOUBLE_QUOTES TSRMLS_CC); return '"'; } -#line 2289 "Zend/zend_ini_scanner.c" +#line 2288 "Zend/zend_ini_scanner.c" yy179: YYDEBUG(179, *YYCURSOR); yych = *++YYCURSOR; @@ -2351,7 +2350,7 @@ yy184: { /* Get number option value as string */ RETURN_TOKEN(TC_NUMBER, yytext, yyleng); } -#line 2355 "Zend/zend_ini_scanner.c" +#line 2354 "Zend/zend_ini_scanner.c" yy185: YYDEBUG(185, *YYCURSOR); yyaccept = 3; @@ -2381,7 +2380,7 @@ yy186: { /* Get constant option value */ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); } -#line 2385 "Zend/zend_ini_scanner.c" +#line 2384 "Zend/zend_ini_scanner.c" yy187: YYDEBUG(187, *YYCURSOR); yych = *++YYCURSOR; @@ -2400,7 +2399,7 @@ yy189: SCNG(lineno)++; return ']'; } -#line 2404 "Zend/zend_ini_scanner.c" +#line 2403 "Zend/zend_ini_scanner.c" yy190: YYDEBUG(190, *YYCURSOR); ++YYCURSOR; @@ -2721,7 +2720,7 @@ yy215: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 2725 "Zend/zend_ini_scanner.c" +#line 2724 "Zend/zend_ini_scanner.c" yy219: YYDEBUG(219, *YYCURSOR); ++YYCURSOR; @@ -2732,7 +2731,7 @@ yy219: yy_push_state(ST_VARNAME TSRMLS_CC); return TC_DOLLAR_CURLY; } -#line 2736 "Zend/zend_ini_scanner.c" +#line 2735 "Zend/zend_ini_scanner.c" yy221: YYDEBUG(221, *YYCURSOR); yyaccept = 0; @@ -2796,7 +2795,7 @@ yyc_ST_VALUE: 162, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, - 166, 166, 166, 162, 162, 162, 162, 166, + 166, 166, 166, 162, 162, 162, 160, 166, 162, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, 166, @@ -2832,6 +2831,7 @@ yyc_ST_VALUE: case '&': case '(': case ')': + case '^': case '|': case '~': goto yy235; case '"': goto yy237; @@ -3024,35 +3024,34 @@ yy243: YYDEBUG(243, *YYCURSOR); yyaccept = 3; yych = *(YYMARKER = ++YYCURSOR); - if (yych <= '.') { - if (yych <= '\r') { - if (yych <= 0x08) { - if (yych >= 0x01) goto yy256; + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy244; + if (yych <= 0x08) goto yy256; } else { - if (yych <= '\n') goto yy244; - if (yych <= '\f') goto yy256; + if (yych != '\r') goto yy256; } } else { - if (yych <= '%') { - if (yych <= 0x1F) goto yy256; - if (yych >= '#') goto yy256; + if (yych <= ')') { + if (yych <= '"') goto yy244; + if (yych <= '%') goto yy256; } else { - if (yych <= ')') goto yy244; - if (yych <= '-') goto yy256; - goto yy288; + if (yych == '.') goto yy288; + goto yy256; } } } else { - if (yych <= '<') { - if (yych <= '9') { - if (yych <= '/') goto yy256; - goto yy290; + if (yych <= ']') { + if (yych <= ';') { + if (yych <= '9') goto yy290; + if (yych <= ':') goto yy256; } else { - if (yych != ';') goto yy256; + if (yych != '=') goto yy256; } } else { if (yych <= '|') { - if (yych <= '=') goto yy244; + if (yych <= '^') goto yy244; if (yych <= '{') goto yy256; } else { if (yych != '~') goto yy256; @@ -3066,7 +3065,7 @@ yy244: { /* Get number option value as string */ RETURN_TOKEN(TC_NUMBER, yytext, yyleng); } -#line 3070 "Zend/zend_ini_scanner.c" +#line 3069 "Zend/zend_ini_scanner.c" yy245: YYDEBUG(245, *YYCURSOR); yyaccept = 2; @@ -3083,7 +3082,7 @@ yy246: BEGIN(INITIAL); return END_OF_LINE; } -#line 3087 "Zend/zend_ini_scanner.c" +#line 3086 "Zend/zend_ini_scanner.c" yy248: YYDEBUG(248, *YYCURSOR); yyaccept = 4; @@ -3091,23 +3090,30 @@ yy248: if (yybm[0+yych] & 4) { goto yy257; } - if (yych <= ')') { - if (yych <= '\f') { - if (yych <= 0x00) goto yy249; - if (yych <= 0x08) goto yy256; - if (yych >= '\v') goto yy256; + if (yych <= ':') { + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy256; + } else { + if (yych <= '\n') goto yy249; + if (yych <= '\f') goto yy256; + } } else { - if (yych <= 0x1F) { - if (yych >= 0x0E) goto yy256; + if (yych <= '"') { + if (yych <= 0x1F) goto yy256; } else { - if (yych <= '"') goto yy249; if (yych <= '%') goto yy256; + if (yych >= '*') goto yy256; } } } else { - if (yych <= '=') { - if (yych == ';') goto yy249; - if (yych <= '<') goto yy256; + if (yych <= '^') { + if (yych <= '<') { + if (yych >= '<') goto yy256; + } else { + if (yych <= '=') goto yy249; + if (yych <= ']') goto yy256; + } } else { if (yych <= '|') { if (yych <= '{') goto yy256; @@ -3123,7 +3129,7 @@ yy249: { /* Get constant option value */ RETURN_TOKEN(TC_CONSTANT, yytext, yyleng); } -#line 3127 "Zend/zend_ini_scanner.c" +#line 3133 "Zend/zend_ini_scanner.c" yy250: YYDEBUG(250, *YYCURSOR); yyaccept = 4; @@ -3151,18 +3157,20 @@ yy250: } } } else { - if (yych <= '`') { + if (yych <= '_') { if (yych <= 'A') { if (yych <= '=') goto yy249; if (yych <= '@') goto yy256; goto yy280; } else { if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; - goto yy256; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + goto yy257; } } else { if (yych <= '{') { + if (yych <= '`') goto yy256; if (yych <= 'a') goto yy280; if (yych <= 'z') goto yy257; goto yy256; @@ -3214,9 +3222,13 @@ yy251: if (yych == 'U') goto yy277; goto yy257; } else { - if (yych == '_') goto yy257; - if (yych <= '`') goto yy256; - goto yy257; + if (yych <= '^') { + if (yych <= ']') goto yy256; + goto yy249; + } else { + if (yych == '`') goto yy256; + goto yy257; + } } } else { if (yych <= 'z') { @@ -3275,9 +3287,13 @@ yy252: if (yych == 'N') goto yy265; goto yy257; } else { - if (yych == '_') goto yy257; - if (yych <= '`') goto yy256; - goto yy257; + if (yych <= '^') { + if (yych <= ']') goto yy256; + goto yy249; + } else { + if (yych == '`') goto yy256; + goto yy257; + } } } else { if (yych <= 'z') { @@ -3324,13 +3340,14 @@ yy253: } } else { if (yych <= '`') { - if (yych <= 'R') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'Q') goto yy257; - goto yy269; + if (yych == 'R') goto yy269; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3374,13 +3391,14 @@ yy254: } } else { if (yych <= '`') { - if (yych <= 'E') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'D') goto yy257; - goto yy259; + if (yych == 'E') goto yy259; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3418,7 +3436,7 @@ yy257: if (yybm[0+yych] & 4) { goto yy257; } - if (yych <= '%') { + if (yych <= ')') { if (yych <= '\r') { if (yych <= 0x08) { if (yych <= 0x00) goto yy249; @@ -3429,25 +3447,28 @@ yy257: goto yy249; } } else { - if (yych <= '"') { + if (yych <= '#') { if (yych <= 0x1F) goto yy255; - goto yy249; - } else { - if (yych == '$') goto yy260; + if (yych <= '"') goto yy249; goto yy255; + } else { + if (yych <= '$') goto yy260; + if (yych <= '%') goto yy255; + goto yy249; } } } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych <= ')') goto yy249; - goto yy255; - } else { - if (yych == '<') goto yy255; + if (yych <= ']') { + if (yych <= ';') { + if (yych <= ':') goto yy255; goto yy249; + } else { + if (yych == '=') goto yy249; + goto yy255; } } else { if (yych <= '|') { + if (yych <= '^') goto yy249; if (yych <= '{') goto yy255; goto yy249; } else { @@ -3485,13 +3506,14 @@ yy259: } } else { if (yych <= '`') { - if (yych <= 'S') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'R') goto yy257; - goto yy265; + if (yych == 'S') goto yy265; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3598,8 +3620,8 @@ yy265: if (yych != '=') goto yy256; } else { if (yych <= 'Z') goto yy257; - if (yych <= '^') goto yy256; - goto yy257; + if (yych <= ']') goto yy256; + if (yych >= '_') goto yy257; } } else { if (yych <= '{') { @@ -3619,7 +3641,7 @@ yy266: { /* TRUE value (when used outside option value/offset this causes parse error!) */ RETURN_TOKEN(BOOL_TRUE, "1", 1); } -#line 3623 "Zend/zend_ini_scanner.c" +#line 3645 "Zend/zend_ini_scanner.c" yy267: YYDEBUG(267, *YYCURSOR); ++YYCURSOR; @@ -3659,12 +3681,13 @@ yy269: } } else { if (yych <= '`') { - if (yych <= 'U') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'T') goto yy257; + if (yych != 'U') goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3708,13 +3731,14 @@ yy270: } } else { if (yych <= '`') { - if (yych <= 'E') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'D') goto yy257; - goto yy265; + if (yych == 'E') goto yy265; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3758,12 +3782,13 @@ yy271: } } else { if (yych <= '`') { - if (yych <= 'F') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'E') goto yy257; + if (yych != 'F') goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3785,7 +3810,7 @@ yy272: if (yybm[0+yych] & 4) { goto yy257; } - if (yych <= '%') { + if (yych <= ')') { if (yych <= '\f') { if (yych <= 0x08) { if (yych >= 0x01) goto yy256; @@ -3794,22 +3819,25 @@ yy272: if (yych >= '\v') goto yy256; } } else { - if (yych <= 0x1F) { - if (yych >= 0x0E) goto yy256; + if (yych <= ' ') { + if (yych <= '\r') goto yy273; + if (yych <= 0x1F) goto yy256; + goto yy274; } else { - if (yych <= ' ') goto yy274; - if (yych >= '#') goto yy256; + if (yych <= '"') goto yy273; + if (yych <= '%') goto yy256; } } } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych >= '*') goto yy256; + if (yych <= ']') { + if (yych <= ';') { + if (yych <= ':') goto yy256; } else { - if (yych == '<') goto yy256; + if (yych != '=') goto yy256; } } else { if (yych <= '|') { + if (yych <= '^') goto yy273; if (yych <= '{') goto yy256; } else { if (yych != '~') goto yy256; @@ -3823,7 +3851,7 @@ yy273: { /* FALSE value (when used outside option value/offset this causes parse error!)*/ RETURN_TOKEN(BOOL_FALSE, "", 0); } -#line 3827 "Zend/zend_ini_scanner.c" +#line 3855 "Zend/zend_ini_scanner.c" yy274: YYDEBUG(274, *YYCURSOR); ++YYCURSOR; @@ -3862,7 +3890,7 @@ yy276: } } } else { - if (yych <= '`') { + if (yych <= '_') { if (yych <= 'N') { if (yych <= '=') goto yy273; if (yych <= '@') goto yy256; @@ -3870,18 +3898,23 @@ yy276: goto yy279; } else { if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; - goto yy256; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy273; + goto yy257; } } else { - if (yych <= '{') { + if (yych <= 'z') { + if (yych <= '`') goto yy256; if (yych == 'n') goto yy279; - if (yych <= 'z') goto yy257; - goto yy256; + goto yy257; } else { - if (yych == '}') goto yy256; - if (yych <= '~') goto yy273; - goto yy256; + if (yych <= '|') { + if (yych <= '{') goto yy256; + goto yy273; + } else { + if (yych == '~') goto yy273; + goto yy256; + } } } } @@ -3914,12 +3947,13 @@ yy277: } } else { if (yych <= '`') { - if (yych <= 'L') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'K') goto yy257; + if (yych != 'L') goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -3963,13 +3997,14 @@ yy278: } } else { if (yych <= '`') { - if (yych <= 'L') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'K') goto yy257; - goto yy272; + if (yych == 'L') goto yy272; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -4013,13 +4048,14 @@ yy279: } } else { if (yych <= '`') { - if (yych <= 'E') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'D') goto yy257; - goto yy272; + if (yych == 'E') goto yy272; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -4063,12 +4099,13 @@ yy280: } } else { if (yych <= '`') { - if (yych <= 'L') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'K') goto yy257; + if (yych != 'L') goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -4112,12 +4149,13 @@ yy281: } } else { if (yych <= '`') { - if (yych <= 'S') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'R') goto yy257; + if (yych != 'S') goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -4161,13 +4199,14 @@ yy282: } } else { if (yych <= '`') { - if (yych <= 'E') { + if (yych <= 'Z') { if (yych <= '@') goto yy256; - if (yych <= 'D') goto yy257; - goto yy272; + if (yych == 'E') goto yy272; + goto yy257; } else { - if (yych <= 'Z') goto yy257; - if (yych == '_') goto yy257; + if (yych <= ']') goto yy256; + if (yych <= '^') goto yy249; + if (yych <= '_') goto yy257; goto yy256; } } else { @@ -4205,7 +4244,7 @@ yy286: SCNG(lineno)++; return END_OF_LINE; } -#line 4209 "Zend/zend_ini_scanner.c" +#line 4248 "Zend/zend_ini_scanner.c" yy287: YYDEBUG(287, *YYCURSOR); yych = *++YYCURSOR; @@ -4221,7 +4260,7 @@ yy288: if (yybm[0+yych] & 64) { goto yy288; } - if (yych <= '%') { + if (yych <= ')') { if (yych <= '\r') { if (yych <= 0x08) { if (yych <= 0x00) goto yy244; @@ -4232,25 +4271,28 @@ yy288: goto yy244; } } else { - if (yych <= '"') { + if (yych <= '#') { if (yych <= 0x1F) goto yy255; - goto yy244; - } else { - if (yych == '$') goto yy260; + if (yych <= '"') goto yy244; goto yy255; + } else { + if (yych <= '$') goto yy260; + if (yych <= '%') goto yy255; + goto yy244; } } } else { - if (yych <= '=') { - if (yych <= ':') { - if (yych <= ')') goto yy244; - goto yy255; - } else { - if (yych == '<') goto yy255; + if (yych <= ']') { + if (yych <= ';') { + if (yych <= ':') goto yy255; goto yy244; + } else { + if (yych == '=') goto yy244; + goto yy255; } } else { if (yych <= '|') { + if (yych <= '^') goto yy244; if (yych <= '{') goto yy255; goto yy244; } else { @@ -4266,7 +4308,7 @@ yy290: YYFILL(1); yych = *YYCURSOR; YYDEBUG(291, *YYCURSOR); - if (yych <= '-') { + if (yych <= '.') { if (yych <= 0x1F) { if (yych <= '\n') { if (yych <= 0x00) goto yy244; @@ -4284,26 +4326,27 @@ yy290: } else { if (yych <= '%') goto yy255; if (yych <= ')') goto yy244; - goto yy255; + if (yych <= '-') goto yy255; + goto yy288; } } } else { - if (yych <= '<') { - if (yych <= '9') { - if (yych <= '.') goto yy288; + if (yych <= '=') { + if (yych <= ':') { if (yych <= '/') goto yy255; - goto yy290; - } else { - if (yych == ';') goto yy244; + if (yych <= '9') goto yy290; goto yy255; + } else { + if (yych == '<') goto yy255; + goto yy244; } } else { - if (yych <= '|') { - if (yych <= '=') goto yy244; - if (yych <= '{') goto yy255; - goto yy244; + if (yych <= '{') { + if (yych == '^') goto yy244; + goto yy255; } else { - if (yych == '~') goto yy244; + if (yych == '}') goto yy255; + if (yych <= '~') goto yy244; goto yy255; } } @@ -4315,39 +4358,40 @@ yy292: YYFILL(1); yych = *YYCURSOR; YYDEBUG(293, *YYCURSOR); - if (yych <= ')') { - if (yych <= '\r') { - if (yych <= 0x08) { + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= '\n') { if (yych <= 0x00) goto yy244; - goto yy255; - } else { - if (yych <= '\n') goto yy244; - if (yych <= '\f') goto yy255; + if (yych <= 0x08) goto yy255; goto yy244; + } else { + if (yych == '\r') goto yy244; + goto yy255; } } else { - if (yych <= '#') { - if (yych <= 0x1F) goto yy255; + if (yych <= '$') { if (yych <= '"') goto yy244; - goto yy255; + if (yych <= '#') goto yy255; + goto yy260; } else { - if (yych <= '$') goto yy260; if (yych <= '%') goto yy255; - goto yy244; + if (yych <= ')') goto yy244; + goto yy255; } } } else { - if (yych <= '<') { - if (yych <= '9') { - if (yych <= '/') goto yy255; - goto yy292; + if (yych <= ']') { + if (yych <= ';') { + if (yych <= '9') goto yy292; + if (yych <= ':') goto yy255; + goto yy244; } else { - if (yych == ';') goto yy244; + if (yych == '=') goto yy244; goto yy255; } } else { if (yych <= '|') { - if (yych <= '=') goto yy244; + if (yych <= '^') goto yy244; if (yych <= '{') goto yy255; goto yy244; } else { @@ -4363,39 +4407,40 @@ yy294: YYFILL(1); yych = *YYCURSOR; YYDEBUG(295, *YYCURSOR); - if (yych <= ')') { - if (yych <= '\r') { - if (yych <= 0x08) { + if (yych <= '/') { + if (yych <= 0x1F) { + if (yych <= '\n') { if (yych <= 0x00) goto yy244; - goto yy255; - } else { - if (yych <= '\n') goto yy244; - if (yych <= '\f') goto yy255; + if (yych <= 0x08) goto yy255; goto yy244; + } else { + if (yych == '\r') goto yy244; + goto yy255; } } else { - if (yych <= '#') { - if (yych <= 0x1F) goto yy255; + if (yych <= '$') { if (yych <= '"') goto yy244; - goto yy255; + if (yych <= '#') goto yy255; + goto yy260; } else { - if (yych <= '$') goto yy260; if (yych <= '%') goto yy255; - goto yy244; + if (yych <= ')') goto yy244; + goto yy255; } } } else { - if (yych <= '<') { - if (yych <= '9') { - if (yych <= '/') goto yy255; - goto yy294; + if (yych <= ']') { + if (yych <= ';') { + if (yych <= '9') goto yy294; + if (yych <= ':') goto yy255; + goto yy244; } else { - if (yych == ';') goto yy244; + if (yych == '=') goto yy244; goto yy255; } } else { if (yych <= '|') { - if (yych <= '=') goto yy244; + if (yych <= '^') goto yy244; if (yych <= '{') goto yy255; goto yy244; } else { @@ -4426,7 +4471,7 @@ yy296: } RETURN_TOKEN(TC_RAW, yytext, yyleng); } -#line 4430 "Zend/zend_ini_scanner.c" +#line 4475 "Zend/zend_ini_scanner.c" yy300: YYDEBUG(300, *YYCURSOR); ++YYCURSOR; @@ -4437,7 +4482,7 @@ yy300: yy_push_state(ST_VARNAME TSRMLS_CC); return TC_DOLLAR_CURLY; } -#line 4441 "Zend/zend_ini_scanner.c" +#line 4486 "Zend/zend_ini_scanner.c" yy302: YYDEBUG(302, *YYCURSOR); ++YYCURSOR; @@ -4502,7 +4547,7 @@ yyc_ST_VARNAME: 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, - 128, 128, 128, 0, 128, 128, 128, 128, + 128, 128, 128, 0, 128, 128, 0, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, @@ -4527,38 +4572,40 @@ yyc_ST_VARNAME: YYDEBUG(309, *YYCURSOR); YYFILL(2); yych = *YYCURSOR; - if (yych <= '\'') { - if (yych <= ' ') { - if (yych <= '\n') { - if (yych >= '\t') goto yy313; + if (yych <= ')') { + if (yych <= '"') { + if (yych <= '\f') { + if (yych <= 0x08) goto yy311; + if (yych <= '\n') goto yy313; } else { - if (yych == '\r') goto yy313; + if (yych <= '\r') goto yy313; + if (yych >= '!') goto yy313; } } else { - if (yych <= '$') { - if (yych != '#') goto yy313; + if (yych <= '%') { + if (yych == '$') goto yy313; } else { - if (yych == '&') goto yy313; + if (yych != '\'') goto yy313; } } } else { - if (yych <= 'Z') { - if (yych <= ';') { - if (yych <= ')') goto yy313; - if (yych >= ';') goto yy313; + if (yych <= '[') { + if (yych <= '<') { + if (yych == ';') goto yy313; } else { - if (yych == '=') goto yy313; + if (yych <= '=') goto yy313; + if (yych >= '[') goto yy313; } } else { - if (yych <= '|') { - if (yych <= '[') goto yy313; - if (yych >= '{') goto yy313; + if (yych <= 'z') { + if (yych == '^') goto yy313; } else { - if (yych <= '}') goto yy315; + if (yych == '}') goto yy315; if (yych <= '~') goto yy313; } } } +yy311: YYDEBUG(311, *YYCURSOR); ++YYCURSOR; yych = *YYCURSOR; @@ -4576,7 +4623,7 @@ yy312: RETURN_TOKEN(TC_VARNAME, yytext, yyleng); } -#line 4580 "Zend/zend_ini_scanner.c" +#line 4627 "Zend/zend_ini_scanner.c" yy313: YYDEBUG(313, *YYCURSOR); ++YYCURSOR; @@ -4586,7 +4633,7 @@ yy313: { return 0; } -#line 4590 "Zend/zend_ini_scanner.c" +#line 4637 "Zend/zend_ini_scanner.c" yy315: YYDEBUG(315, *YYCURSOR); ++YYCURSOR; @@ -4597,7 +4644,7 @@ yy315: yy_pop_state(TSRMLS_C); return '}'; } -#line 4601 "Zend/zend_ini_scanner.c" +#line 4648 "Zend/zend_ini_scanner.c" yy317: YYDEBUG(317, *YYCURSOR); ++YYCURSOR; diff --git a/Zend/zend_ini_scanner.l b/Zend/zend_ini_scanner.l index 5fb28d425..92fb08f02 100644 --- a/Zend/zend_ini_scanner.l +++ b/Zend/zend_ini_scanner.l @@ -340,9 +340,9 @@ NEWLINE ("\r"|"\n"|"\r\n") TABS_AND_SPACES [ \t] WHITESPACE [ \t]+ CONSTANT [a-zA-Z_][a-zA-Z0-9_]* -LABEL [^=\n\r\t;|&$~(){}!"\[]+ -TOKENS [:,.\[\]"'()|^&+-/*=%$!~<>?@{}] -OPERATORS [&|~()!] +LABEL [^=\n\r\t;&|^$~(){}!"\[]+ +TOKENS [:,.\[\]"'()&|^+-/*=%$!~<>?@{}] +OPERATORS [&|^~()!] DOLLAR_CURLY "${" SECTION_RAW_CHARS [^\]\n\r] @@ -350,7 +350,7 @@ SINGLE_QUOTED_CHARS [^'] RAW_VALUE_CHARS [^\n\r;\000] LITERAL_DOLLAR ("$"([^{\000]|("\\"{ANY_CHAR}))) -VALUE_CHARS ([^$= \t\n\r;&|~()!"'\000]|{LITERAL_DOLLAR}) +VALUE_CHARS ([^$= \t\n\r;&|^~()!"'\000]|{LITERAL_DOLLAR}) SECTION_VALUE_CHARS ([^$\n\r;"'\]\\]|("\\"{ANY_CHAR})|{LITERAL_DOLLAR}) <!*> := yyleng = YYCURSOR - SCNG(yy_text); diff --git a/Zend/zend_language_scanner.c b/Zend/zend_language_scanner.c index f2ba6bf9d..9a62a9c04 100644 --- a/Zend/zend_language_scanner.c +++ b/Zend/zend_language_scanner.c @@ -597,7 +597,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR CG(active_op_array) = original_active_op_array; if (compilation_successful) { pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); } else { efree(op_array); retval = NULL; @@ -772,7 +772,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) zend_do_return(NULL, 0 TSRMLS_CC); CG(active_op_array) = original_active_op_array; pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); retval = op_array; } } diff --git a/Zend/zend_language_scanner.l b/Zend/zend_language_scanner.l index d44ba20e1..23a2f472c 100644 --- a/Zend/zend_language_scanner.l +++ b/Zend/zend_language_scanner.l @@ -595,7 +595,7 @@ ZEND_API zend_op_array *compile_file(zend_file_handle *file_handle, int type TSR CG(active_op_array) = original_active_op_array; if (compilation_successful) { pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); } else { efree(op_array); retval = NULL; @@ -770,7 +770,7 @@ zend_op_array *compile_string(zval *source_string, char *filename TSRMLS_DC) zend_do_return(NULL, 0 TSRMLS_CC); CG(active_op_array) = original_active_op_array; pass_two(op_array TSRMLS_CC); - zend_release_labels(TSRMLS_C); + zend_release_labels(0 TSRMLS_CC); retval = op_array; } } |