diff options
author | Ondřej Surý <ondrej@sury.org> | 2014-06-20 12:01:47 +0200 |
---|---|---|
committer | Ondřej Surý <ondrej@sury.org> | 2014-06-20 12:01:47 +0200 |
commit | 60d44b592c4c4fdcbbf92db2882a97a9cc54713c (patch) | |
tree | 58f7068d9acde2338841263461fbf95d77a9ee2e | |
parent | c63e1a09f5cbd757f59beb729fb0fb36516819a9 (diff) | |
download | php-60d44b592c4c4fdcbbf92db2882a97a9cc54713c.tar.gz |
New upstream version 5.6.0~rc1+dfsgupstream/5.6.0_rc1+dfsg
141 files changed, 3447 insertions, 4266 deletions
diff --git a/.travis.yml b/.travis.yml index 5b49434cc..8c72df918 100644 --- a/.travis.yml +++ b/.travis.yml @@ -32,4 +32,6 @@ before_script: - . ./travis/ext/pdo_pgsql/setup.sh # Run PHPs run-tests.php -script: ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --show-diff --set-timeout 120 +script: + - ./sapi/cli/php run-tests.php -p `pwd`/sapi/cli/php -g "FAIL,XFAIL,BORK,WARN,LEAK,SKIP" --show-diff --set-timeout 120 + - ./sapi/cli/php sapi/phpdbg/tests/run-tests.php -diff2stdout --phpdbg sapi/phpdbg/phpdbg @@ -1,6 +1,6 @@ -------------------------------------------------------------------- The PHP License, version 3.01 -Copyright (c) 1999 - 2012 The PHP Group. All rights reserved. +Copyright (c) 1999 - 2014 The PHP Group. All rights reserved. -------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -1,5 +1,68 @@ PHP NEWS ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| +19 Jun 2014, PHP 5.6.0 Release Candidate 1 + +- Core: + . Implemented FR #64744 (Differentiate between member function call on a null + and non-null, non-objects). (Boro Sitnikovski) + . Fixed bug #67436 (Autoloader isn't called if two method definitions don't + match). (Bob) + . Fixed bug #66622 (Closures do not correctly capture the late bound class + (static::) in some cases). (Levi Morrison) + . Fixed bug #67390 (insecure temporary file use in the configure script). + (Remi) (CVE-2014-3981) + . Fixed bug #67392 (dtrace breaks argument unpack). (Nikita) + . Fixed bug #67428 (header('Location: foo') will override a 308-399 response + code). (Adam) + . Fixed bug #67433 (SIGSEGV when using count() on an object implementing + Countable). (Matteo) + . Fixed bug #67399 (putenv with empty variable may lead to crash). (Stas) + +- CLI server: + . Implemented FR #67429 (CLI server is missing some new HTTP response codes). + (Adam) + . Fixed Bug #67406 (built-in web-server segfaults on startup). (Remi) + +- Fileinfo: + . Fixed bug #67410 (fileinfo: mconvert incorrect handling of truncated pascal + string size). (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67411 (fileinfo: cdf_check_stream_offset insufficient boundary + check). (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67412 (fileinfo: cdf_count_chain insufficient boundary check). + (Francisco Alonso, Jan Kaluza, Remi) + . Fixed bug #67413 (fileinfo: cdf_read_property_info insufficient boundary + check). (Francisco Alonso, Jan Kaluza, Remi) + +- mysqlnd: + . Added support for gb18030 from MySQL 5.7. (Andrey) + +- Network: + . Fixed bug #67432 (Fix potential segfault in dns_get_record()). + (CVE-2014-4049). (Sara) + +- OpenSSL: + . Fixed bug #65698 (certificates validity parsing does not work past 2050). + (Paul Oehler) + . Fixed bug #66636 (openssl_x509_parse warning with V_ASN1_GENERALIZEDTIME). + (Paul Oehler) + +- phpdbg: + . Fixed bug #67212 (phpdbg uses non-standard TIOCGWINSZ). (Ferenc) + +- SOAP: + . Implemented FR #49898 (Add SoapClient::__getCookies()). (Boro Sitnikovski) + +- SPL: + . Fixed bug #66127 (Segmentation fault with ArrayObject unset). (Stas) + . Fixed request #67453 (Allow to unserialize empty data). (Remi) + +- Streams: + . Fixed bug #67430 (http:// wrapper doesn't follow 308 redirects). (Adam) + +- Tokenizer: + . Fixed bug #67395 (token_name() does not return name for T_POW and T_POW_EQUAL + token). (Ferenc) + 05 Jun 2014, PHP 5.6.0 Beta 4 - Core: @@ -8,6 +71,9 @@ PHP NEWS - Date: . Fixed bug #67308 (Serialize of DateTime truncates fractions of second). (Adam) + . Fixed regression in fix for bug #67118 (constructor can't be called twice). + (Remi) + - Fileinfo: . Fixed bug #67327 (fileinfo: CDF infinite loop in nelements DoS). diff --git a/README.namespaces b/README.namespaces index 9c427b634..9c427b634 100755..100644 --- a/README.namespaces +++ b/README.namespaces diff --git a/UPGRADING b/UPGRADING index 7a174c47c..7a174c47c 100755..100644 --- a/UPGRADING +++ b/UPGRADING diff --git a/Zend/tests/bug67436/a.php b/Zend/tests/bug67436/a.php new file mode 100644 index 000000000..c560c2db7 --- /dev/null +++ b/Zend/tests/bug67436/a.php @@ -0,0 +1,10 @@ +<?php + +class a { + public function test($arg = c::TESTCONSTANT) { + echo __METHOD__ . "($arg)\n"; + } + + static public function staticTest() { + } +} diff --git a/Zend/tests/bug67436/b.php b/Zend/tests/bug67436/b.php new file mode 100644 index 000000000..793a1394d --- /dev/null +++ b/Zend/tests/bug67436/b.php @@ -0,0 +1,8 @@ +<?php + +class b extends a { + public function test() { + echo __METHOD__ . "()\n"; + parent::test(); + } +} diff --git a/Zend/tests/bug67436/bug67436.phpt b/Zend/tests/bug67436/bug67436.phpt new file mode 100644 index 000000000..49b8b491d --- /dev/null +++ b/Zend/tests/bug67436/bug67436.phpt @@ -0,0 +1,26 @@ +--TEST-- +bug67436: Autoloader isn't called if user defined error handler is present + +--INI-- +error_reporting= + +--FILE-- +<?php + +spl_autoload_register(function($classname) { + if (in_array($classname, array('a','b','c'))) { + require_once ($classname . '.php'); + } +}); + +set_error_handler(function ($errno, $errstr, $errfile, $errline) { +}, error_reporting()); + +a::staticTest(); + +$b = new b(); +$b->test(); + +--EXPECT-- +b::test() +a::test(c::TESTCONSTANT) diff --git a/Zend/tests/bug67436/bug67436_nohandler.phpt b/Zend/tests/bug67436/bug67436_nohandler.phpt new file mode 100644 index 000000000..464f71153 --- /dev/null +++ b/Zend/tests/bug67436/bug67436_nohandler.phpt @@ -0,0 +1,24 @@ +--TEST-- +bug67436: E_STRICT instead of custom error handler + +--INI-- +error_reporting=-1 + +--FILE-- +<?php + +spl_autoload_register(function($classname) { + if (in_array($classname, array('a','b','c'))) { + require_once ($classname . '.php'); + } +}); + +a::staticTest(); + +$b = new b(); +$b->test(); + +--EXPECTF-- +Strict Standards: Declaration of b::test() should be compatible with a::test($arg = c::TESTCONSTANT) in %s/bug67436/b.php on line %d +b::test() +a::test(c::TESTCONSTANT) diff --git a/Zend/tests/bug67436/c.php b/Zend/tests/bug67436/c.php new file mode 100644 index 000000000..47c848bfa --- /dev/null +++ b/Zend/tests/bug67436/c.php @@ -0,0 +1,5 @@ +<?php + +class c { + const TESTCONSTANT = "c::TESTCONSTANT"; +} diff --git a/Zend/tests/closure_049.phpt b/Zend/tests/closure_049.phpt new file mode 100644 index 000000000..684b33d56 --- /dev/null +++ b/Zend/tests/closure_049.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 049: static::class in static closure in non-static method. + +--FILE-- +<?php + +class A { + function foo() { + $f = static function() { + return static::class; + }; + return $f(); + } +} + +class B extends A {} + +$b = new B; + +var_dump($b->foo()); +--EXPECT-- +string(1) "B" diff --git a/Zend/tests/closure_050.phpt b/Zend/tests/closure_050.phpt new file mode 100644 index 000000000..d43f325ef --- /dev/null +++ b/Zend/tests/closure_050.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 050: static::class in non-static closure in non-static method. + +--FILE-- +<?php + +class A { + function foo() { + $f = function() { + return static::class; + }; + return $f(); + } +} + +class B extends A {} + +$b = new B; +var_dump($b->foo()); + +--EXPECT-- +string(1) "B" diff --git a/Zend/tests/closure_051.phpt b/Zend/tests/closure_051.phpt new file mode 100644 index 000000000..78b28d74a --- /dev/null +++ b/Zend/tests/closure_051.phpt @@ -0,0 +1,21 @@ +--TEST-- +Closure 051: static::class in static closure in static method. + +--FILE-- +<?php + +class A { + static function foo() { + $f = static function() { + return static::class; + }; + return $f(); + } +} + +class B extends A {} + +var_dump(B::foo()); + +--EXPECT-- +string(1) "B" diff --git a/Zend/tests/closure_052.phpt b/Zend/tests/closure_052.phpt new file mode 100644 index 000000000..f878515a8 --- /dev/null +++ b/Zend/tests/closure_052.phpt @@ -0,0 +1,21 @@ +--TEST-- +Closure 052: static::class in non-static closure in static method. + +--FILE-- +<?php + +class A { + static function foo() { + $f = function() { + return static::class; + }; + return $f(); + } +} + +class B extends A {} + +var_dump(B::foo()); + +--EXPECT-- +string(1) "B" diff --git a/Zend/tests/closure_053.phpt b/Zend/tests/closure_053.phpt new file mode 100644 index 000000000..b1d76a256 --- /dev/null +++ b/Zend/tests/closure_053.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 053: self::class in static closure in non-static method. + +--FILE-- +<?php + +class A { + function foo() { + $f = static function() { + return self::class; + }; + return $f(); + } +} + +class B extends A {} + +$b = new B; +var_dump($b->foo()); + +--EXPECT-- +string(1) "A" diff --git a/Zend/tests/closure_054.phpt b/Zend/tests/closure_054.phpt new file mode 100644 index 000000000..b2f87d1d6 --- /dev/null +++ b/Zend/tests/closure_054.phpt @@ -0,0 +1,22 @@ +--TEST-- +Closure 054: self::class in non-static closure in non-static method. + +--FILE-- +<?php + +class A { + function foo() { + $f = function() { + return self::class; + }; + return $f(); + } +} + +class B extends A {} + +$b = new B; +var_dump($b->foo()); + +--EXPECT-- +string(1) "A" diff --git a/Zend/tests/closure_055.phpt b/Zend/tests/closure_055.phpt new file mode 100644 index 000000000..047d72a89 --- /dev/null +++ b/Zend/tests/closure_055.phpt @@ -0,0 +1,21 @@ +--TEST-- +Closure 055: self::class in static closure in static method. + +--FILE-- +<?php + +class A { + static function foo() { + $f = static function() { + return self::class; + }; + return $f(); + } +} + +class B extends A {} + +var_dump(B::foo()); + +--EXPECT-- +string(1) "A" diff --git a/Zend/tests/closure_056.phpt b/Zend/tests/closure_056.phpt new file mode 100644 index 000000000..566de10d8 --- /dev/null +++ b/Zend/tests/closure_056.phpt @@ -0,0 +1,21 @@ +--TEST-- +Closure 056: self::class in non-static closure in static method. + +--FILE-- +<?php + +class A { + static function foo() { + $f = function() { + return self::class; + }; + return $f(); + } +} + +class B extends A {} + +var_dump(B::foo()); + +--EXPECT-- +string(1) "A" diff --git a/Zend/tests/closure_bug66622.phpt b/Zend/tests/closure_bug66622.phpt new file mode 100644 index 000000000..1c9577d68 --- /dev/null +++ b/Zend/tests/closure_bug66622.phpt @@ -0,0 +1,37 @@ +--TEST-- +Bug 66622: Closures do not correctly capture the late bound class (static::) in some cases + +--FILE-- +<?php +class A { + static function name() { return 'A'; } + function foo() { + $fn = function() { return static::name(); }; + echo static::name() . ' vs ' . $fn() . "\n"; + } + function bar() { + $fn = static function() { return static::name(); }; + echo static::name() . ' vs ' . $fn() . "\n"; + } + static function baz() { + $fn = function() { return static::name(); }; + echo static::name() . ' vs ' . $fn() . "\n"; + } +} +class B extends A { + static function name() { return 'B'; } +} + +function test() { + (new B)->foo(); + (new B)->bar(); + (new B)->baz(); + B::baz(); +} +test(); + +--EXPECT-- +B vs B +B vs B +B vs B +B vs B diff --git a/Zend/tests/dereference_002.phpt b/Zend/tests/dereference_002.phpt index 022ff370d..da13decc3 100644 --- a/Zend/tests/dereference_002.phpt +++ b/Zend/tests/dereference_002.phpt @@ -76,4 +76,4 @@ NULL Notice: Undefined offset: 3 in %s on line %d -Fatal error: Call to a member function bar() on a non-object in %s on line %d +Fatal error: Call to a member function bar() on null in %s on line %d diff --git a/Zend/zend_builtin_functions.c b/Zend/zend_builtin_functions.c index 6bfb88898..d7a1b3710 100644 --- a/Zend/zend_builtin_functions.c +++ b/Zend/zend_builtin_functions.c @@ -245,16 +245,16 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(func_num_args, arginfo_zend__void) ZEND_FE(func_get_arg, arginfo_func_get_arg) ZEND_FE(func_get_args, arginfo_zend__void) - ZEND_FE(strlen, arginfo_strlen) - ZEND_FE(strcmp, arginfo_strcmp) - ZEND_FE(strncmp, arginfo_strncmp) - ZEND_FE(strcasecmp, arginfo_strcmp) + ZEND_FE(strlen, arginfo_strlen) + ZEND_FE(strcmp, arginfo_strcmp) + ZEND_FE(strncmp, arginfo_strncmp) + ZEND_FE(strcasecmp, arginfo_strcmp) ZEND_FE(strncasecmp, arginfo_strncmp) - ZEND_FE(each, arginfo_each) + ZEND_FE(each, arginfo_each) ZEND_FE(error_reporting, arginfo_error_reporting) - ZEND_FE(define, arginfo_define) - ZEND_FE(defined, arginfo_defined) - ZEND_FE(get_class, arginfo_get_class) + ZEND_FE(define, arginfo_define) + ZEND_FE(defined, arginfo_defined) + ZEND_FE(get_class, arginfo_get_class) ZEND_FE(get_called_class, arginfo_zend__void) ZEND_FE(get_parent_class, arginfo_get_class) ZEND_FE(method_exists, arginfo_method_exists) @@ -274,13 +274,13 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(get_included_files, arginfo_zend__void) ZEND_FALIAS(get_required_files, get_included_files, arginfo_zend__void) ZEND_FE(is_subclass_of, arginfo_is_subclass_of) - ZEND_FE(is_a, arginfo_is_subclass_of) + ZEND_FE(is_a, arginfo_is_subclass_of) ZEND_FE(get_class_vars, arginfo_get_class_vars) ZEND_FE(get_object_vars, arginfo_get_object_vars) ZEND_FE(get_class_methods, arginfo_get_class_methods) ZEND_FE(trigger_error, arginfo_trigger_error) ZEND_FALIAS(user_error, trigger_error, arginfo_trigger_error) - ZEND_FE(set_error_handler, arginfo_set_error_handler) + ZEND_FE(set_error_handler, arginfo_set_error_handler) ZEND_FE(restore_error_handler, arginfo_zend__void) ZEND_FE(set_exception_handler, arginfo_set_exception_handler) ZEND_FE(restore_exception_handler, arginfo_zend__void) @@ -288,14 +288,14 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ ZEND_FE(get_declared_traits, arginfo_zend__void) ZEND_FE(get_declared_interfaces, arginfo_zend__void) ZEND_FE(get_defined_functions, arginfo_zend__void) - ZEND_FE(get_defined_vars, arginfo_zend__void) - ZEND_FE(create_function, arginfo_create_function) - ZEND_FE(get_resource_type, arginfo_get_resource_type) + ZEND_FE(get_defined_vars, arginfo_zend__void) + ZEND_FE(create_function, arginfo_create_function) + ZEND_FE(get_resource_type, arginfo_get_resource_type) ZEND_FE(get_loaded_extensions, arginfo_get_loaded_extensions) - ZEND_FE(extension_loaded, arginfo_extension_loaded) + ZEND_FE(extension_loaded, arginfo_extension_loaded) ZEND_FE(get_extension_funcs, arginfo_extension_loaded) ZEND_FE(get_defined_constants, arginfo_get_defined_constants) - ZEND_FE(debug_backtrace, arginfo_debug_backtrace) + ZEND_FE(debug_backtrace, arginfo_debug_backtrace) ZEND_FE(debug_print_backtrace, arginfo_debug_print_backtrace) #if ZEND_DEBUG ZEND_FE(zend_test_func, NULL) @@ -305,7 +305,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */ #endif ZEND_FE(gc_collect_cycles, arginfo_zend__void) ZEND_FE(gc_enabled, arginfo_zend__void) - ZEND_FE(gc_enable, arginfo_zend__void) + ZEND_FE(gc_enable, arginfo_zend__void) ZEND_FE(gc_disable, arginfo_zend__void) ZEND_FE_END }; diff --git a/Zend/zend_closures.c b/Zend/zend_closures.c index d714b35b3..bd2ede329 100644 --- a/Zend/zend_closures.c +++ b/Zend/zend_closures.c @@ -480,6 +480,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent } } + closure->this_ptr = NULL; /* Invariants: * If the closure is unscoped, it has no bound object. * The the closure is scoped, it's either static or it's bound */ @@ -491,10 +492,7 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func, zend_class_ent Z_ADDREF_P(this_ptr); } else { closure->func.common.fn_flags |= ZEND_ACC_STATIC; - closure->this_ptr = NULL; } - } else { - closure->this_ptr = NULL; } } /* }}} */ diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index beb53402b..7c979d56b 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -3461,8 +3461,11 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{ *zv = *precv->op2.zv; zval_copy_ctor(zv); INIT_PZVAL(zv); - zval_update_constant_ex(&zv, 1, fptr->common.scope TSRMLS_CC); - if (Z_TYPE_P(zv) == IS_BOOL) { + if ((Z_TYPE_P(zv) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT) { + REALLOC_BUF_IF_EXCEED(buf, offset, length, Z_STRLEN_P(zv)); + memcpy(offset, Z_STRVAL_P(zv), Z_STRLEN_P(zv)); + offset += Z_STRLEN_P(zv); + } else if (Z_TYPE_P(zv) == IS_BOOL) { if (Z_LVAL_P(zv)) { memcpy(offset, "true", 4); offset += 4; @@ -3487,6 +3490,9 @@ static char * zend_get_function_declaration(zend_function *fptr TSRMLS_DC) /* {{ } else if (Z_TYPE_P(zv) == IS_ARRAY) { memcpy(offset, "Array", 5); offset += 5; + } else if ((Z_TYPE_P(zv) & IS_CONSTANT_TYPE_MASK) == IS_CONSTANT_AST) { + memcpy(offset, "<expression>", 12); + offset += 12; } else { zend_make_printable_zval(zv, &zv_copy, &use_copy); REALLOC_BUF_IF_EXCEED(buf, offset, length, Z_STRLEN(zv_copy)); diff --git a/Zend/zend_execute.c b/Zend/zend_execute.c index bdf8b6e70..ad92c5fb6 100644 --- a/Zend/zend_execute.c +++ b/Zend/zend_execute.c @@ -1490,7 +1490,8 @@ ZEND_API void execute_internal(zend_execute_data *execute_data_ptr, zend_fcall_i } else { zval **return_value_ptr = &EX_TMP_VAR(execute_data_ptr, execute_data_ptr->opline->result.var)->var.ptr; execute_data_ptr->function_state.function->internal_function.handler( - execute_data_ptr->opline->extended_value, *return_value_ptr, return_value_ptr, + execute_data_ptr->opline->extended_value + execute_data_ptr->call->num_additional_args, + *return_value_ptr, return_value_ptr, execute_data_ptr->object, return_value_used TSRMLS_CC ); } diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c index c9de6b93c..af32e91f2 100644 --- a/Zend/zend_execute_API.c +++ b/Zend/zend_execute_API.c @@ -449,8 +449,6 @@ ZEND_API int zend_is_true(zval *op) /* {{{ */ } /* }}} */ -#include "../TSRM/tsrm_strtok_r.h" - #define IS_VISITED_CONSTANT 0x80 #define IS_CONSTANT_VISITED(p) (Z_TYPE_P(p) & IS_VISITED_CONSTANT) #define Z_REAL_TYPE_P(p) (Z_TYPE_P(p) & ~IS_VISITED_CONSTANT) diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index da4f03a2b..cd7dbf498 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -2463,7 +2463,7 @@ ZEND_VM_HANDLER(112, ZEND_INIT_METHOD_CALL, TMP|VAR|UNUSED|CV, CONST|TMP|VAR|CV) FREE_OP2(); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -5400,6 +5400,7 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) { USE_OPLINE zend_function *op_array; + int closure_is_static, closure_is_being_defined_inside_static_context; SAVE_OPLINE(); @@ -5408,7 +5409,13 @@ ZEND_VM_HANDLER(153, ZEND_DECLARE_LAMBDA_FUNCTION, CONST, UNUSED) zend_error_noreturn(E_ERROR, "Base lambda function for closure not found"); } - zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + closure_is_static = op_array->common.fn_flags & ZEND_ACC_STATIC; + closure_is_being_defined_inside_static_context = EX(prev_execute_data) && EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC; + if (closure_is_static || closure_is_being_defined_inside_static_context) { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC); + } else { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index 3fb5ab3eb..29a8c0c80 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -6781,6 +6781,7 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER { USE_OPLINE zend_function *op_array; + int closure_is_static, closure_is_being_defined_inside_static_context; SAVE_OPLINE(); @@ -6789,7 +6790,13 @@ static int ZEND_FASTCALL ZEND_DECLARE_LAMBDA_FUNCTION_SPEC_CONST_UNUSED_HANDLER zend_error_noreturn(E_ERROR, "Base lambda function for closure not found"); } - zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + closure_is_static = op_array->common.fn_flags & ZEND_ACC_STATIC; + closure_is_being_defined_inside_static_context = EX(prev_execute_data) && EX(prev_execute_data)->function_state.function->common.fn_flags & ZEND_ACC_STATIC; + if (closure_is_static || closure_is_being_defined_inside_static_context) { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(called_scope), NULL TSRMLS_CC); + } else { + zend_create_closure(&EX_T(opline->result.var).tmp_var, (zend_function *) op_array, EG(scope), EG(This) TSRMLS_CC); + } CHECK_EXCEPTION(); ZEND_VM_NEXT_OPCODE(); @@ -9306,7 +9313,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_CONST_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -10171,7 +10178,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_TMP_HANDLER(ZEND_OPCODE zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -11037,7 +11044,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_VAR_HANDLER(ZEND_OPCODE zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -12483,7 +12490,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_TMP_CV_HANDLER(ZEND_OPCODE_ HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -15721,7 +15728,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_CONST_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -18067,7 +18074,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_TMP_HANDLER(ZEND_OPCODE zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -20374,7 +20381,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_VAR_HANDLER(ZEND_OPCODE zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -23831,7 +23838,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_VAR_CV_HANDLER(ZEND_OPCODE_ HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -25473,7 +25480,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CONST_HANDLER(ZEND_O HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -26881,7 +26888,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_TMP_HANDLER(ZEND_OPC zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -28195,7 +28202,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_VAR_HANDLER(ZEND_OPC zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -29937,7 +29944,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_UNUSED_CV_HANDLER(ZEND_OPCO HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -33176,7 +33183,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CONST_HANDLER(ZEND_OPCOD HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -35288,7 +35295,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_TMP_HANDLER(ZEND_OPCODE_ zval_dtor(free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -37455,7 +37462,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_VAR_HANDLER(ZEND_OPCODE_ zval_ptr_dtor_nogc(&free_op2.var); HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { @@ -40623,7 +40630,7 @@ static int ZEND_FASTCALL ZEND_INIT_METHOD_CALL_SPEC_CV_CV_HANDLER(ZEND_OPCODE_H HANDLE_EXCEPTION(); } - zend_error_noreturn(E_ERROR, "Call to a member function %s() on a non-object", function_name_strval); + zend_error_noreturn(E_ERROR, "Call to a member function %s() on %s", function_name_strval, zend_get_type_by_const(Z_TYPE_P(call->object))); } if ((call->fbc->common.fn_flags & ZEND_ACC_STATIC) != 0) { diff --git a/acinclude.m4 b/acinclude.m4 index c25e59eef..3ccc7b262 100644 --- a/acinclude.m4 +++ b/acinclude.m4 @@ -1711,7 +1711,7 @@ int main(int argc, char *argv[]) { FILE *fp; long position; - char *filename = "/tmp/phpglibccheck"; + char *filename = tmpnam(NULL); fp = fopen(filename, "w"); if (fp == NULL) { diff --git a/aclocal.m4 b/aclocal.m4 index 4d75eb96e..0cb6719f5 100644 --- a/aclocal.m4 +++ b/aclocal.m4 @@ -1711,7 +1711,7 @@ int main(int argc, char *argv[]) { FILE *fp; long position; - char *filename = "/tmp/phpglibccheck"; + char *filename = tmpnam(NULL); fp = fopen(filename, "w"); if (fp == NULL) { diff --git a/build/build.mk b/build/build.mk index ac5dadb31..2c189159a 100644 --- a/build/build.mk +++ b/build/build.mk @@ -1,7 +1,7 @@ # +----------------------------------------------------------------------+ # | PHP Version 5 | # +----------------------------------------------------------------------+ -# | Copyright (c) 1997-2006 The PHP Group | +# | Copyright (c) 1997-2014 The PHP Group | # +----------------------------------------------------------------------+ # | This source file is subject to version 3.01 of the PHP license, | # | that is bundled with this package in the file LICENSE, and is | @@ -14,8 +14,6 @@ # | Author: Sascha Schumann <sascha@schumann.cx> | # +----------------------------------------------------------------------+ # -# $Id$ -# # # Makefile to generate build tools # @@ -61,16 +59,6 @@ snapshot: md5sum $$distname.tar.bz2; \ bzip2 -t $$distname.tar.bz2 -cvsclean-work: - @for i in `find . -name .cvsignore`; do \ - (cd `dirname $$i` 2>/dev/null && rm -rf `cat .cvsignore | grep -v config.nice | sed 's/[[:space:]]/ /g'` *.o *.a *.lo *.la *.gcno *.gcda .libs || true); \ - done - -svnclean-work: - @for i in `find . -type d ! -path '*/.svn/*' | grep -v '.svn'`; do \ - (cd $$i 2>/dev/null && rm -rf `svn propget svn:ignore . | grep -v config.nice` *.o *.a *.lo *.la *.gcno *.gcda .libs || true); \ - done - gitclean-work: @if (test ! -f '.git/info/exclude' || grep -s "git-ls-files" .git/info/exclude); then \ (echo "Rebuild .git/info/exclude" && echo '*.o' > .git/info/exclude && git svn propget svn:ignore | grep -v config.nice >> .git/info/exclude); \ @@ -3666,7 +3666,7 @@ ac_config_headers="$ac_config_headers main/php_config.h" PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=6 PHP_RELEASE_VERSION=0 -PHP_EXTRA_VERSION="beta4" +PHP_EXTRA_VERSION="RC1" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr $PHP_MAJOR_VERSION \* 10000 + $PHP_MINOR_VERSION \* 100 + $PHP_RELEASE_VERSION` @@ -13977,6 +13977,66 @@ $as_echo "$ext_output" >&6; } if test "$PHP_PHPDBG" != "no"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether termios.h defines TIOCGWINSZ" >&5 +$as_echo_n "checking whether termios.h defines TIOCGWINSZ... " >&6; } +if test "${ac_cv_sys_tiocgwinsz_in_termios_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <termios.h> +#ifdef TIOCGWINSZ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_sys_tiocgwinsz_in_termios_h=yes +else + ac_cv_sys_tiocgwinsz_in_termios_h=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_termios_h" >&5 +$as_echo "$ac_cv_sys_tiocgwinsz_in_termios_h" >&6; } + +if test $ac_cv_sys_tiocgwinsz_in_termios_h != yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether sys/ioctl.h defines TIOCGWINSZ" >&5 +$as_echo_n "checking whether sys/ioctl.h defines TIOCGWINSZ... " >&6; } +if test "${ac_cv_sys_tiocgwinsz_in_sys_ioctl_h+set}" = set; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <sys/types.h> +#include <sys/ioctl.h> +#ifdef TIOCGWINSZ + yes +#endif + +_ACEOF +if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | + $EGREP "yes" >/dev/null 2>&1; then : + ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=yes +else + ac_cv_sys_tiocgwinsz_in_sys_ioctl_h=no +fi +rm -f conftest* + +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&5 +$as_echo "$ac_cv_sys_tiocgwinsz_in_sys_ioctl_h" >&6; } + + if test $ac_cv_sys_tiocgwinsz_in_sys_ioctl_h = yes; then + +$as_echo "#define GWINSZ_IN_SYS_IOCTL 1" >>confdefs.h + + fi +fi + $as_echo "#define HAVE_PHPDBG 1" >>confdefs.h @@ -14010,8 +14070,8 @@ $as_echo "#define PHPDBG_DEBUG 0" >>confdefs.h src=$abs_srcdir/sapi/phpdbg/Makefile.frag - ac_srcdir=$ext_srcdir - ac_builddir=$ext_builddir + ac_srcdir=$abs_srcdir/sapi/phpdbg + ac_builddir=$abs_builddir/sapi/phpdbg test -f "$src" && $SED -e "s#\$(srcdir)#$ac_srcdir#g" -e "s#\$(builddir)#$ac_builddir#g" $src >> Makefile.fragments @@ -18292,7 +18352,7 @@ int main(int argc, char *argv[]) { FILE *fp; long position; - char *filename = "/tmp/phpglibccheck"; + char *filename = tmpnam(NULL); fp = fopen(filename, "w"); if (fp == NULL) { @@ -105016,7 +105076,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 105019 "configure" +#line 105079 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -106928,7 +106988,7 @@ ia64-*-hpux*) ;; *-*-irix6*) # Find out which ABI we are using. - echo '#line 106931 "configure"' > conftest.$ac_ext + echo '#line 106991 "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? @@ -108320,7 +108380,7 @@ else LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat > conftest.$ac_ext <<EOF -#line 108323 "configure" +#line 108383 "configure" #include "confdefs.h" int main() { ; return 0; } @@ -108478,11 +108538,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:108481: $lt_compile\"" >&5) + (eval echo "\"configure:108541: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "configure:108485: \$? = $ac_status" >&5 + echo "configure:108545: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -108776,11 +108836,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:108779: $lt_compile\"" >&5) + (eval echo "\"configure:108839: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "configure:108783: \$? = $ac_status" >&5 + echo "configure:108843: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -108880,11 +108940,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:108883: $lt_compile\"" >&5) + (eval echo "\"configure:108943: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "configure:108887: \$? = $ac_status" >&5 + echo "configure:108947: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized @@ -109344,7 +109404,7 @@ _LT_EOF # Determine the default libpath from the value encoded in an empty executable. cat > conftest.$ac_ext <<EOF -#line 109347 "configure" +#line 109407 "configure" #include "confdefs.h" int main() { ; return 0; } @@ -109386,7 +109446,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # Determine the default libpath from the value encoded in an empty executable. cat > conftest.$ac_ext <<EOF -#line 109389 "configure" +#line 109449 "configure" #include "confdefs.h" int main() { ; return 0; } @@ -110911,7 +110971,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 110914 "configure" +#line 110974 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -111011,7 +111071,7 @@ else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<EOF -#line 111014 "configure" +#line 111074 "configure" #include "confdefs.h" #if HAVE_DLFCN_H @@ -112076,7 +112136,7 @@ case $host_os in # Determine the default libpath from the value encoded in an empty executable. cat > conftest.$ac_ext <<EOF -#line 112079 "configure" +#line 112139 "configure" #include "confdefs.h" int main() { ; return 0; } @@ -112119,7 +112179,7 @@ if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi # Determine the default libpath from the value encoded in an empty executable. cat > conftest.$ac_ext <<EOF -#line 112122 "configure" +#line 112182 "configure" #include "confdefs.h" int main() { ; return 0; } @@ -113371,11 +113431,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:113374: $lt_compile\"" >&5) + (eval echo "\"configure:113434: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 - echo "configure:113378: \$? = $ac_status" >&5 + echo "configure:113438: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. @@ -113475,11 +113535,11 @@ else -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` - (eval echo "\"configure:113478: $lt_compile\"" >&5) + (eval echo "\"configure:113538: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 - echo "configure:113482: \$? = $ac_status" >&5 + echo "configure:113542: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized diff --git a/configure.in b/configure.in index ff81da632..ff1e9e04c 100644 --- a/configure.in +++ b/configure.in @@ -120,7 +120,7 @@ int zend_sprintf(char *buffer, const char *format, ...); PHP_MAJOR_VERSION=5 PHP_MINOR_VERSION=6 PHP_RELEASE_VERSION=0 -PHP_EXTRA_VERSION="beta4" +PHP_EXTRA_VERSION="RC1" PHP_VERSION="$PHP_MAJOR_VERSION.$PHP_MINOR_VERSION.$PHP_RELEASE_VERSION$PHP_EXTRA_VERSION" PHP_VERSION_ID=`expr [$]PHP_MAJOR_VERSION \* 10000 + [$]PHP_MINOR_VERSION \* 100 + [$]PHP_RELEASE_VERSION` diff --git a/ext/date/lib/parse_date.c b/ext/date/lib/parse_date.c index dffa9770c..77ceb88b7 100644 --- a/ext/date/lib/parse_date.c +++ b/ext/date/lib/parse_date.c @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/date/lib/parse_date.re b/ext/date/lib/parse_date.re index bbae79441..277935abe 100644 --- a/ext/date/lib/parse_date.re +++ b/ext/date/lib/parse_date.re @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/date/lib/parse_iso_intervals.re b/ext/date/lib/parse_iso_intervals.re index cbbf8781b..8c82cfc3b 100644 --- a/ext/date/lib/parse_iso_intervals.re +++ b/ext/date/lib/parse_iso_intervals.re @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index da6749c51..c270eeb80 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -13,575 +13,575 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[580] = { { "Africa/Brazzaville" , 0x00051C }, { "Africa/Bujumbura" , 0x000571 }, { "Africa/Cairo" , 0x0005B5 }, - { "Africa/Casablanca" , 0x0009A4 }, - { "Africa/Ceuta" , 0x000C06 }, - { "Africa/Conakry" , 0x000F0D }, - { "Africa/Dakar" , 0x000F78 }, - { "Africa/Dar_es_Salaam" , 0x000FDE }, - { "Africa/Djibouti" , 0x00104B }, - { "Africa/Douala" , 0x0010A0 }, - { "Africa/El_Aaiun" , 0x0010F5 }, - { "Africa/Freetown" , 0x001320 }, - { "Africa/Gaborone" , 0x00142F }, - { "Africa/Harare" , 0x00149C }, - { "Africa/Johannesburg" , 0x0014F1 }, - { "Africa/Juba" , 0x00155F }, - { "Africa/Kampala" , 0x001672 }, - { "Africa/Khartoum" , 0x0016F1 }, - { "Africa/Kigali" , 0x001804 }, - { "Africa/Kinshasa" , 0x001859 }, - { "Africa/Lagos" , 0x0018B4 }, - { "Africa/Libreville" , 0x001909 }, - { "Africa/Lome" , 0x00195E }, - { "Africa/Luanda" , 0x0019A2 }, - { "Africa/Lubumbashi" , 0x0019F7 }, - { "Africa/Lusaka" , 0x001A52 }, - { "Africa/Malabo" , 0x001AA7 }, - { "Africa/Maputo" , 0x001B0D }, - { "Africa/Maseru" , 0x001B62 }, - { "Africa/Mbabane" , 0x001BCA }, - { "Africa/Mogadishu" , 0x001C20 }, - { "Africa/Monrovia" , 0x001C7B }, - { "Africa/Nairobi" , 0x001CE1 }, - { "Africa/Ndjamena" , 0x001D60 }, - { "Africa/Niamey" , 0x001DCC }, - { "Africa/Nouakchott" , 0x001E3F }, - { "Africa/Ouagadougou" , 0x001EAA }, - { "Africa/Porto-Novo" , 0x001EFF }, - { "Africa/Sao_Tome" , 0x001F65 }, - { "Africa/Timbuktu" , 0x001FBA }, - { "Africa/Tripoli" , 0x002025 }, - { "Africa/Tunis" , 0x00212E }, - { "Africa/Windhoek" , 0x002240 }, - { "America/Adak" , 0x002487 }, - { "America/Anchorage" , 0x0027FD }, - { "America/Anguilla" , 0x002B71 }, - { "America/Antigua" , 0x002BC6 }, - { "America/Araguaina" , 0x002C2C }, - { "America/Argentina/Buenos_Aires" , 0x002D91 }, - { "America/Argentina/Catamarca" , 0x002F3F }, - { "America/Argentina/ComodRivadavia" , 0x003100 }, - { "America/Argentina/Cordoba" , 0x0032A6 }, - { "America/Argentina/Jujuy" , 0x00347B }, - { "America/Argentina/La_Rioja" , 0x00362F }, - { "America/Argentina/Mendoza" , 0x0037E7 }, - { "America/Argentina/Rio_Gallegos" , 0x0039A7 }, - { "America/Argentina/Salta" , 0x003B5C }, - { "America/Argentina/San_Juan" , 0x003D08 }, - { "America/Argentina/San_Luis" , 0x003EC0 }, - { "America/Argentina/Tucuman" , 0x004086 }, - { "America/Argentina/Ushuaia" , 0x004242 }, - { "America/Aruba" , 0x0043FD }, - { "America/Asuncion" , 0x004463 }, - { "America/Atikokan" , 0x004748 }, - { "America/Atka" , 0x00481E }, - { "America/Bahia" , 0x004B84 }, - { "America/Bahia_Banderas" , 0x004D17 }, - { "America/Barbados" , 0x004F90 }, - { "America/Belem" , 0x00502A }, - { "America/Belize" , 0x005125 }, - { "America/Blanc-Sablon" , 0x0052A1 }, - { "America/Boa_Vista" , 0x005355 }, - { "America/Bogota" , 0x00545E }, - { "America/Boise" , 0x0054CA }, - { "America/Buenos_Aires" , 0x005861 }, - { "America/Cambridge_Bay" , 0x0059FA }, - { "America/Campo_Grande" , 0x005D22 }, - { "America/Cancun" , 0x006011 }, - { "America/Caracas" , 0x006253 }, - { "America/Catamarca" , 0x0062BA }, - { "America/Cayenne" , 0x006460 }, - { "America/Cayman" , 0x0064C2 }, - { "America/Chicago" , 0x006517 }, - { "America/Chihuahua" , 0x006A2E }, - { "America/Coral_Harbour" , 0x006C99 }, - { "America/Cordoba" , 0x006D2B }, - { "America/Costa_Rica" , 0x006ED1 }, - { "America/Creston" , 0x006F5B }, - { "America/Cuiaba" , 0x006FE7 }, - { "America/Curacao" , 0x0072C5 }, - { "America/Danmarkshavn" , 0x00732B }, - { "America/Dawson" , 0x00746F }, - { "America/Dawson_Creek" , 0x00778C }, - { "America/Denver" , 0x007966 }, - { "America/Detroit" , 0x007CEC }, - { "America/Dominica" , 0x00804B }, - { "America/Edmonton" , 0x0080A0 }, - { "America/Eirunepe" , 0x008458 }, - { "America/El_Salvador" , 0x008570 }, - { "America/Ensenada" , 0x0085E5 }, - { "America/Fort_Wayne" , 0x008A8C }, - { "America/Fortaleza" , 0x00894E }, - { "America/Glace_Bay" , 0x008CF6 }, - { "America/Godthab" , 0x00906D }, - { "America/Goose_Bay" , 0x009331 }, - { "America/Grand_Turk" , 0x0097EE }, - { "America/Grenada" , 0x009A9D }, - { "America/Guadeloupe" , 0x009AF2 }, - { "America/Guatemala" , 0x009B47 }, - { "America/Guayaquil" , 0x009BD0 }, - { "America/Guyana" , 0x009C2D }, - { "America/Halifax" , 0x009CAE }, - { "America/Havana" , 0x00A1C4 }, - { "America/Hermosillo" , 0x00A537 }, - { "America/Indiana/Indianapolis" , 0x00A615 }, - { "America/Indiana/Knox" , 0x00A8A6 }, - { "America/Indiana/Marengo" , 0x00AC3D }, - { "America/Indiana/Petersburg" , 0x00AEE3 }, - { "America/Indiana/Tell_City" , 0x00B430 }, - { "America/Indiana/Vevay" , 0x00B6C9 }, - { "America/Indiana/Vincennes" , 0x00B904 }, - { "America/Indiana/Winamac" , 0x00BBB8 }, - { "America/Indianapolis" , 0x00B1C6 }, - { "America/Inuvik" , 0x00BE71 }, - { "America/Iqaluit" , 0x00C168 }, - { "America/Jamaica" , 0x00C48A }, - { "America/Jujuy" , 0x00C54F }, - { "America/Juneau" , 0x00C6F9 }, - { "America/Kentucky/Louisville" , 0x00CA77 }, - { "America/Kentucky/Monticello" , 0x00CE95 }, - { "America/Knox_IN" , 0x00D21A }, - { "America/Kralendijk" , 0x00D58B }, - { "America/La_Paz" , 0x00D5F1 }, - { "America/Lima" , 0x00D658 }, - { "America/Los_Angeles" , 0x00D700 }, - { "America/Louisville" , 0x00DB11 }, - { "America/Lower_Princes" , 0x00DF06 }, - { "America/Maceio" , 0x00DF6C }, - { "America/Managua" , 0x00E0A6 }, - { "America/Manaus" , 0x00E159 }, - { "America/Marigot" , 0x00E25B }, - { "America/Martinique" , 0x00E2B0 }, - { "America/Matamoros" , 0x00E31C }, - { "America/Mazatlan" , 0x00E575 }, - { "America/Mendoza" , 0x00E7E2 }, - { "America/Menominee" , 0x00E996 }, - { "America/Merida" , 0x00ED17 }, - { "America/Metlakatla" , 0x00EF52 }, - { "America/Mexico_City" , 0x00F08C }, - { "America/Miquelon" , 0x00F307 }, - { "America/Moncton" , 0x00F579 }, - { "America/Monterrey" , 0x00FA10 }, - { "America/Montevideo" , 0x00FC73 }, - { "America/Montreal" , 0x00FF85 }, - { "America/Montserrat" , 0x010475 }, - { "America/Nassau" , 0x0104CA }, - { "America/New_York" , 0x01080F }, - { "America/Nipigon" , 0x010D1A }, - { "America/Nome" , 0x01106B }, - { "America/Noronha" , 0x0113E9 }, - { "America/North_Dakota/Beulah" , 0x011519 }, - { "America/North_Dakota/Center" , 0x0118AD }, - { "America/North_Dakota/New_Salem" , 0x011C41 }, - { "America/Ojinaga" , 0x011FEA }, - { "America/Panama" , 0x01224B }, - { "America/Pangnirtung" , 0x0122A0 }, - { "America/Paramaribo" , 0x0125D6 }, - { "America/Phoenix" , 0x012668 }, - { "America/Port-au-Prince" , 0x012726 }, - { "America/Port_of_Spain" , 0x012A4A }, - { "America/Porto_Acre" , 0x012946 }, - { "America/Porto_Velho" , 0x012A9F }, - { "America/Puerto_Rico" , 0x012B95 }, - { "America/Rainy_River" , 0x012C00 }, - { "America/Rankin_Inlet" , 0x012F38 }, - { "America/Recife" , 0x01321E }, - { "America/Regina" , 0x013348 }, - { "America/Resolute" , 0x013506 }, - { "America/Rio_Branco" , 0x0137F7 }, - { "America/Rosario" , 0x0138FF }, - { "America/Santa_Isabel" , 0x013AA5 }, - { "America/Santarem" , 0x013E48 }, - { "America/Santiago" , 0x013F4D }, - { "America/Santo_Domingo" , 0x0142F6 }, - { "America/Sao_Paulo" , 0x0143BC }, - { "America/Scoresbysund" , 0x0146CB }, - { "America/Shiprock" , 0x0149B9 }, - { "America/Sitka" , 0x014D32 }, - { "America/St_Barthelemy" , 0x0150BA }, - { "America/St_Johns" , 0x01510F }, - { "America/St_Kitts" , 0x015662 }, - { "America/St_Lucia" , 0x0156B7 }, - { "America/St_Thomas" , 0x01570C }, - { "America/St_Vincent" , 0x015761 }, - { "America/Swift_Current" , 0x0157B6 }, - { "America/Tegucigalpa" , 0x0158D7 }, - { "America/Thule" , 0x015956 }, - { "America/Thunder_Bay" , 0x015B9D }, - { "America/Tijuana" , 0x015EE6 }, - { "America/Toronto" , 0x01627F }, - { "America/Tortola" , 0x01679F }, - { "America/Vancouver" , 0x0167F4 }, - { "America/Virgin" , 0x016C31 }, - { "America/Whitehorse" , 0x016C86 }, - { "America/Winnipeg" , 0x016FA3 }, - { "America/Yakutat" , 0x0173E3 }, - { "America/Yellowknife" , 0x01774E }, - { "Antarctica/Casey" , 0x017A5E }, - { "Antarctica/Davis" , 0x017AFB }, - { "Antarctica/DumontDUrville" , 0x017B9C }, - { "Antarctica/Macquarie" , 0x017C2E }, - { "Antarctica/Mawson" , 0x017E75 }, - { "Antarctica/McMurdo" , 0x017EF1 }, - { "Antarctica/Palmer" , 0x01829C }, - { "Antarctica/Rothera" , 0x0185B8 }, - { "Antarctica/South_Pole" , 0x01862E }, - { "Antarctica/Syowa" , 0x0189AC }, - { "Antarctica/Troll" , 0x018A1A }, - { "Antarctica/Vostok" , 0x018BEC }, - { "Arctic/Longyearbyen" , 0x018C5D }, - { "Asia/Aden" , 0x018F8F }, - { "Asia/Almaty" , 0x018FE4 }, - { "Asia/Amman" , 0x019163 }, - { "Asia/Anadyr" , 0x019419 }, - { "Asia/Aqtau" , 0x0195FE }, - { "Asia/Aqtobe" , 0x0197FD }, - { "Asia/Ashgabat" , 0x0199B5 }, - { "Asia/Ashkhabad" , 0x019AD2 }, - { "Asia/Baghdad" , 0x019BEF }, - { "Asia/Bahrain" , 0x019D64 }, - { "Asia/Baku" , 0x019DCA }, - { "Asia/Bangkok" , 0x01A0B2 }, - { "Asia/Beirut" , 0x01A107 }, - { "Asia/Bishkek" , 0x01A414 }, - { "Asia/Brunei" , 0x01A5C0 }, - { "Asia/Calcutta" , 0x01A622 }, - { "Asia/Choibalsan" , 0x01A69B }, - { "Asia/Chongqing" , 0x01A814 }, - { "Asia/Chungking" , 0x01A903 }, - { "Asia/Colombo" , 0x01A9B2 }, - { "Asia/Dacca" , 0x01AA4E }, - { "Asia/Damascus" , 0x01AAF4 }, - { "Asia/Dhaka" , 0x01AE44 }, - { "Asia/Dili" , 0x01AEEA }, - { "Asia/Dubai" , 0x01AF74 }, - { "Asia/Dushanbe" , 0x01AFC9 }, - { "Asia/Gaza" , 0x01B0CC }, - { "Asia/Harbin" , 0x01B41F }, - { "Asia/Hebron" , 0x01B506 }, - { "Asia/Ho_Chi_Minh" , 0x01B862 }, - { "Asia/Hong_Kong" , 0x01B8DA }, - { "Asia/Hovd" , 0x01BA9C }, - { "Asia/Irkutsk" , 0x01BC14 }, - { "Asia/Istanbul" , 0x01BDFA }, - { "Asia/Jakarta" , 0x01C1E7 }, - { "Asia/Jayapura" , 0x01C291 }, - { "Asia/Jerusalem" , 0x01C32D }, - { "Asia/Kabul" , 0x01C65C }, - { "Asia/Kamchatka" , 0x01C6AD }, - { "Asia/Karachi" , 0x01C889 }, - { "Asia/Kashgar" , 0x01C93E }, - { "Asia/Kathmandu" , 0x01CA0F }, - { "Asia/Katmandu" , 0x01CA75 }, - { "Asia/Khandyga" , 0x01CADB }, - { "Asia/Kolkata" , 0x01CD00 }, - { "Asia/Krasnoyarsk" , 0x01CD79 }, - { "Asia/Kuala_Lumpur" , 0x01CF61 }, - { "Asia/Kuching" , 0x01D01E }, - { "Asia/Kuwait" , 0x01D10C }, - { "Asia/Macao" , 0x01D161 }, - { "Asia/Macau" , 0x01D29C }, - { "Asia/Magadan" , 0x01D3D7 }, - { "Asia/Makassar" , 0x01D5B9 }, - { "Asia/Manila" , 0x01D67E }, - { "Asia/Muscat" , 0x01D703 }, - { "Asia/Nicosia" , 0x01D758 }, - { "Asia/Novokuznetsk" , 0x01DA40 }, - { "Asia/Novosibirsk" , 0x01DC42 }, - { "Asia/Omsk" , 0x01DE2D }, - { "Asia/Oral" , 0x01E014 }, - { "Asia/Phnom_Penh" , 0x01E1E4 }, - { "Asia/Pontianak" , 0x01E25C }, - { "Asia/Pyongyang" , 0x01E31E }, - { "Asia/Qatar" , 0x01E38B }, - { "Asia/Qyzylorda" , 0x01E3F1 }, - { "Asia/Rangoon" , 0x01E5C7 }, - { "Asia/Riyadh" , 0x01E63F }, - { "Asia/Saigon" , 0x01E694 }, - { "Asia/Sakhalin" , 0x01E70C }, - { "Asia/Samarkand" , 0x01E903 }, - { "Asia/Seoul" , 0x01EA39 }, - { "Asia/Shanghai" , 0x01EADD }, - { "Asia/Singapore" , 0x01EBBD }, - { "Asia/Taipei" , 0x01EC74 }, - { "Asia/Tashkent" , 0x01ED8C }, - { "Asia/Tbilisi" , 0x01EEBD }, - { "Asia/Tehran" , 0x01F077 }, - { "Asia/Tel_Aviv" , 0x01F2E5 }, - { "Asia/Thimbu" , 0x01F614 }, - { "Asia/Thimphu" , 0x01F67A }, - { "Asia/Tokyo" , 0x01F6E0 }, - { "Asia/Ujung_Pandang" , 0x01F769 }, - { "Asia/Ulaanbaatar" , 0x01F7E6 }, - { "Asia/Ulan_Bator" , 0x01F941 }, - { "Asia/Urumqi" , 0x01FA8E }, - { "Asia/Ust-Nera" , 0x01FB55 }, - { "Asia/Vientiane" , 0x01FD5A }, - { "Asia/Vladivostok" , 0x01FDD2 }, - { "Asia/Yakutsk" , 0x01FFBE }, - { "Asia/Yekaterinburg" , 0x0201A3 }, - { "Asia/Yerevan" , 0x0203AE }, - { "Atlantic/Azores" , 0x0205AE }, - { "Atlantic/Bermuda" , 0x020AB1 }, - { "Atlantic/Canary" , 0x020D92 }, - { "Atlantic/Cape_Verde" , 0x021068 }, - { "Atlantic/Faeroe" , 0x0210E1 }, - { "Atlantic/Faroe" , 0x021385 }, - { "Atlantic/Jan_Mayen" , 0x021629 }, - { "Atlantic/Madeira" , 0x02195B }, - { "Atlantic/Reykjavik" , 0x021E64 }, - { "Atlantic/South_Georgia" , 0x02201D }, - { "Atlantic/St_Helena" , 0x02222F }, - { "Atlantic/Stanley" , 0x022061 }, - { "Australia/ACT" , 0x022284 }, - { "Australia/Adelaide" , 0x0225A1 }, - { "Australia/Brisbane" , 0x0228CD }, - { "Australia/Broken_Hill" , 0x022994 }, - { "Australia/Canberra" , 0x022CD2 }, - { "Australia/Currie" , 0x022FEF }, - { "Australia/Darwin" , 0x023322 }, - { "Australia/Eucla" , 0x0233A8 }, - { "Australia/Hobart" , 0x02347D }, - { "Australia/LHI" , 0x0237DB }, - { "Australia/Lindeman" , 0x023A76 }, - { "Australia/Lord_Howe" , 0x023B57 }, - { "Australia/Melbourne" , 0x023E02 }, - { "Australia/North" , 0x024127 }, - { "Australia/NSW" , 0x02419B }, - { "Australia/Perth" , 0x0244B8 }, - { "Australia/Queensland" , 0x024590 }, - { "Australia/South" , 0x02463C }, - { "Australia/Sydney" , 0x024959 }, - { "Australia/Tasmania" , 0x024C96 }, - { "Australia/Victoria" , 0x024FDB }, - { "Australia/West" , 0x0252F8 }, - { "Australia/Yancowinna" , 0x0253AE }, - { "Brazil/Acre" , 0x0256D0 }, - { "Brazil/DeNoronha" , 0x0257D4 }, - { "Brazil/East" , 0x0258F4 }, - { "Brazil/West" , 0x025BD1 }, - { "Canada/Atlantic" , 0x025CC9 }, - { "Canada/Central" , 0x0261B1 }, - { "Canada/East-Saskatchewan" , 0x026ABB }, - { "Canada/Eastern" , 0x0265CB }, - { "Canada/Mountain" , 0x026C44 }, - { "Canada/Newfoundland" , 0x026FBA }, - { "Canada/Pacific" , 0x0274E5 }, - { "Canada/Saskatchewan" , 0x0278FE }, - { "Canada/Yukon" , 0x027A87 }, - { "CET" , 0x027D8A }, - { "Chile/Continental" , 0x028093 }, - { "Chile/EasterIsland" , 0x02842E }, - { "CST6CDT" , 0x028770 }, - { "Cuba" , 0x028AC1 }, - { "EET" , 0x028E34 }, - { "Egypt" , 0x0290E7 }, - { "Eire" , 0x0294D6 }, - { "EST" , 0x0299E7 }, - { "EST5EDT" , 0x029A2B }, - { "Etc/GMT" , 0x029D7C }, - { "Etc/GMT+0" , 0x029E48 }, - { "Etc/GMT+1" , 0x029ED2 }, - { "Etc/GMT+10" , 0x029F5F }, - { "Etc/GMT+11" , 0x029FED }, - { "Etc/GMT+12" , 0x02A07B }, - { "Etc/GMT+2" , 0x02A196 }, - { "Etc/GMT+3" , 0x02A222 }, - { "Etc/GMT+4" , 0x02A2AE }, - { "Etc/GMT+5" , 0x02A33A }, - { "Etc/GMT+6" , 0x02A3C6 }, - { "Etc/GMT+7" , 0x02A452 }, - { "Etc/GMT+8" , 0x02A4DE }, - { "Etc/GMT+9" , 0x02A56A }, - { "Etc/GMT-0" , 0x029E04 }, - { "Etc/GMT-1" , 0x029E8C }, - { "Etc/GMT-10" , 0x029F18 }, - { "Etc/GMT-11" , 0x029FA6 }, - { "Etc/GMT-12" , 0x02A034 }, - { "Etc/GMT-13" , 0x02A0C2 }, - { "Etc/GMT-14" , 0x02A109 }, - { "Etc/GMT-2" , 0x02A150 }, - { "Etc/GMT-3" , 0x02A1DC }, - { "Etc/GMT-4" , 0x02A268 }, - { "Etc/GMT-5" , 0x02A2F4 }, - { "Etc/GMT-6" , 0x02A380 }, - { "Etc/GMT-7" , 0x02A40C }, - { "Etc/GMT-8" , 0x02A498 }, - { "Etc/GMT-9" , 0x02A524 }, - { "Etc/GMT0" , 0x029DC0 }, - { "Etc/Greenwich" , 0x02A5B0 }, - { "Etc/UCT" , 0x02A5F4 }, - { "Etc/Universal" , 0x02A638 }, - { "Etc/UTC" , 0x02A67C }, - { "Etc/Zulu" , 0x02A6C0 }, - { "Europe/Amsterdam" , 0x02A704 }, - { "Europe/Andorra" , 0x02AB42 }, - { "Europe/Athens" , 0x02ADBE }, - { "Europe/Belfast" , 0x02B101 }, - { "Europe/Belgrade" , 0x02B638 }, - { "Europe/Berlin" , 0x02B901 }, - { "Europe/Bratislava" , 0x02BC65 }, - { "Europe/Brussels" , 0x02BF97 }, - { "Europe/Bucharest" , 0x02C3CE }, - { "Europe/Budapest" , 0x02C6F8 }, - { "Europe/Busingen" , 0x02CA6B }, - { "Europe/Chisinau" , 0x02CD22 }, - { "Europe/Copenhagen" , 0x02D0B0 }, - { "Europe/Dublin" , 0x02D3BA }, - { "Europe/Gibraltar" , 0x02D8CB }, - { "Europe/Guernsey" , 0x02DD22 }, - { "Europe/Helsinki" , 0x02E259 }, - { "Europe/Isle_of_Man" , 0x02E50F }, - { "Europe/Istanbul" , 0x02EA46 }, - { "Europe/Jersey" , 0x02EE33 }, - { "Europe/Kaliningrad" , 0x02F36A }, - { "Europe/Kiev" , 0x02F5D0 }, - { "Europe/Lisbon" , 0x02F8EC }, - { "Europe/Ljubljana" , 0x02FDF0 }, - { "Europe/London" , 0x0300B9 }, - { "Europe/Luxembourg" , 0x0305F0 }, - { "Europe/Madrid" , 0x030A46 }, - { "Europe/Malta" , 0x030E0C }, - { "Europe/Mariehamn" , 0x0311C5 }, - { "Europe/Minsk" , 0x03147B }, - { "Europe/Monaco" , 0x031689 }, - { "Europe/Moscow" , 0x031AC4 }, - { "Europe/Nicosia" , 0x031D15 }, - { "Europe/Oslo" , 0x031FFD }, - { "Europe/Paris" , 0x03232F }, - { "Europe/Podgorica" , 0x032775 }, - { "Europe/Prague" , 0x032A3E }, - { "Europe/Riga" , 0x032D70 }, - { "Europe/Rome" , 0x0330B5 }, - { "Europe/Samara" , 0x033478 }, - { "Europe/San_Marino" , 0x0336AB }, - { "Europe/Sarajevo" , 0x033A6E }, - { "Europe/Simferopol" , 0x033D37 }, - { "Europe/Skopje" , 0x033F83 }, - { "Europe/Sofia" , 0x03424C }, - { "Europe/Stockholm" , 0x034554 }, - { "Europe/Tallinn" , 0x034803 }, - { "Europe/Tirane" , 0x034B3D }, - { "Europe/Tiraspol" , 0x034E43 }, - { "Europe/Uzhgorod" , 0x0351D1 }, - { "Europe/Vaduz" , 0x0354E8 }, - { "Europe/Vatican" , 0x035797 }, - { "Europe/Vienna" , 0x035B5A }, - { "Europe/Vilnius" , 0x035E87 }, - { "Europe/Volgograd" , 0x0361C6 }, - { "Europe/Warsaw" , 0x0363C6 }, - { "Europe/Zagreb" , 0x0367A7 }, - { "Europe/Zaporozhye" , 0x036A70 }, - { "Europe/Zurich" , 0x036DB1 }, - { "Factory" , 0x037060 }, - { "GB" , 0x0370D1 }, - { "GB-Eire" , 0x037608 }, - { "GMT" , 0x037B3F }, - { "GMT+0" , 0x037C0B }, - { "GMT-0" , 0x037BC7 }, - { "GMT0" , 0x037B83 }, - { "Greenwich" , 0x037C4F }, - { "Hongkong" , 0x037C93 }, - { "HST" , 0x037E55 }, - { "Iceland" , 0x037E99 }, - { "Indian/Antananarivo" , 0x038052 }, - { "Indian/Chagos" , 0x0380C6 }, - { "Indian/Christmas" , 0x038128 }, - { "Indian/Cocos" , 0x03816C }, - { "Indian/Comoro" , 0x0381B0 }, - { "Indian/Kerguelen" , 0x038205 }, - { "Indian/Mahe" , 0x03825A }, - { "Indian/Maldives" , 0x0382AF }, - { "Indian/Mauritius" , 0x038304 }, - { "Indian/Mayotte" , 0x03837A }, - { "Indian/Reunion" , 0x0383CF }, - { "Iran" , 0x038424 }, - { "Israel" , 0x038692 }, - { "Jamaica" , 0x0389C1 }, - { "Japan" , 0x038A86 }, - { "Kwajalein" , 0x038B0F }, - { "Libya" , 0x038B72 }, - { "MET" , 0x038C7B }, - { "Mexico/BajaNorte" , 0x038F84 }, - { "Mexico/BajaSur" , 0x0392ED }, - { "Mexico/General" , 0x039532 }, - { "MST" , 0x039790 }, - { "MST7MDT" , 0x0397D4 }, - { "Navajo" , 0x039B25 }, - { "NZ" , 0x039E9E }, - { "NZ-CHAT" , 0x03A21C }, - { "Pacific/Apia" , 0x03A504 }, - { "Pacific/Auckland" , 0x03A6A0 }, - { "Pacific/Chatham" , 0x03AA2C }, - { "Pacific/Chuuk" , 0x03AD23 }, - { "Pacific/Easter" , 0x03AD7C }, - { "Pacific/Efate" , 0x03B0DA }, - { "Pacific/Enderbury" , 0x03B1A0 }, - { "Pacific/Fakaofo" , 0x03B20E }, - { "Pacific/Fiji" , 0x03B25F }, - { "Pacific/Funafuti" , 0x03B3F2 }, - { "Pacific/Galapagos" , 0x03B436 }, - { "Pacific/Gambier" , 0x03B4AE }, - { "Pacific/Guadalcanal" , 0x03B513 }, - { "Pacific/Guam" , 0x03B568 }, - { "Pacific/Honolulu" , 0x03B5BE }, - { "Pacific/Johnston" , 0x03B635 }, - { "Pacific/Kiritimati" , 0x03B6B4 }, - { "Pacific/Kosrae" , 0x03B71F }, - { "Pacific/Kwajalein" , 0x03B77C }, - { "Pacific/Majuro" , 0x03B7E8 }, - { "Pacific/Marquesas" , 0x03B847 }, - { "Pacific/Midway" , 0x03B8AE }, - { "Pacific/Nauru" , 0x03B938 }, - { "Pacific/Niue" , 0x03B9B0 }, - { "Pacific/Norfolk" , 0x03BA0E }, - { "Pacific/Noumea" , 0x03BA63 }, - { "Pacific/Pago_Pago" , 0x03BAF3 }, - { "Pacific/Palau" , 0x03BB7C }, - { "Pacific/Pitcairn" , 0x03BBC0 }, - { "Pacific/Pohnpei" , 0x03BC15 }, - { "Pacific/Ponape" , 0x03BC6A }, - { "Pacific/Port_Moresby" , 0x03BCAF }, - { "Pacific/Rarotonga" , 0x03BCF3 }, - { "Pacific/Saipan" , 0x03BDCF }, - { "Pacific/Samoa" , 0x03BE32 }, - { "Pacific/Tahiti" , 0x03BEBB }, - { "Pacific/Tarawa" , 0x03BF20 }, - { "Pacific/Tongatapu" , 0x03BF74 }, - { "Pacific/Truk" , 0x03C000 }, - { "Pacific/Wake" , 0x03C045 }, - { "Pacific/Wallis" , 0x03C095 }, - { "Pacific/Yap" , 0x03C0D9 }, - { "Poland" , 0x03C11E }, - { "Portugal" , 0x03C4FF }, - { "PRC" , 0x03C9FB }, - { "PST8PDT" , 0x03CAAC }, - { "ROC" , 0x03CDFD }, - { "ROK" , 0x03CF15 }, - { "Singapore" , 0x03CFB9 }, - { "Turkey" , 0x03D070 }, - { "UCT" , 0x03D45D }, - { "Universal" , 0x03D4A1 }, - { "US/Alaska" , 0x03D4E5 }, - { "US/Aleutian" , 0x03D84E }, - { "US/Arizona" , 0x03DBB4 }, - { "US/Central" , 0x03DC42 }, - { "US/East-Indiana" , 0x03E64C }, - { "US/Eastern" , 0x03E14D }, - { "US/Hawaii" , 0x03E8B6 }, - { "US/Indiana-Starke" , 0x03E927 }, - { "US/Michigan" , 0x03EC98 }, - { "US/Mountain" , 0x03EFCF }, - { "US/Pacific" , 0x03F348 }, - { "US/Pacific-New" , 0x03F74D }, - { "US/Samoa" , 0x03FB52 }, - { "UTC" , 0x03FBDB }, - { "W-SU" , 0x03FED2 }, - { "WET" , 0x03FC1F }, - { "Zulu" , 0x04010C }, + { "Africa/Casablanca" , 0x00099C }, + { "Africa/Ceuta" , 0x000BFE }, + { "Africa/Conakry" , 0x000F05 }, + { "Africa/Dakar" , 0x000F70 }, + { "Africa/Dar_es_Salaam" , 0x000FD6 }, + { "Africa/Djibouti" , 0x001043 }, + { "Africa/Douala" , 0x001098 }, + { "Africa/El_Aaiun" , 0x0010ED }, + { "Africa/Freetown" , 0x001318 }, + { "Africa/Gaborone" , 0x001427 }, + { "Africa/Harare" , 0x001494 }, + { "Africa/Johannesburg" , 0x0014E9 }, + { "Africa/Juba" , 0x001557 }, + { "Africa/Kampala" , 0x00166A }, + { "Africa/Khartoum" , 0x0016E9 }, + { "Africa/Kigali" , 0x0017FC }, + { "Africa/Kinshasa" , 0x001851 }, + { "Africa/Lagos" , 0x0018AC }, + { "Africa/Libreville" , 0x001901 }, + { "Africa/Lome" , 0x001956 }, + { "Africa/Luanda" , 0x00199A }, + { "Africa/Lubumbashi" , 0x0019EF }, + { "Africa/Lusaka" , 0x001A4A }, + { "Africa/Malabo" , 0x001A9F }, + { "Africa/Maputo" , 0x001B05 }, + { "Africa/Maseru" , 0x001B5A }, + { "Africa/Mbabane" , 0x001BC2 }, + { "Africa/Mogadishu" , 0x001C18 }, + { "Africa/Monrovia" , 0x001C73 }, + { "Africa/Nairobi" , 0x001CD9 }, + { "Africa/Ndjamena" , 0x001D58 }, + { "Africa/Niamey" , 0x001DC4 }, + { "Africa/Nouakchott" , 0x001E37 }, + { "Africa/Ouagadougou" , 0x001EA2 }, + { "Africa/Porto-Novo" , 0x001EF7 }, + { "Africa/Sao_Tome" , 0x001F5D }, + { "Africa/Timbuktu" , 0x001FB2 }, + { "Africa/Tripoli" , 0x00201D }, + { "Africa/Tunis" , 0x002126 }, + { "Africa/Windhoek" , 0x002238 }, + { "America/Adak" , 0x00247F }, + { "America/Anchorage" , 0x0027F5 }, + { "America/Anguilla" , 0x002B69 }, + { "America/Antigua" , 0x002BBE }, + { "America/Araguaina" , 0x002C24 }, + { "America/Argentina/Buenos_Aires" , 0x002D89 }, + { "America/Argentina/Catamarca" , 0x002F37 }, + { "America/Argentina/ComodRivadavia" , 0x0030F8 }, + { "America/Argentina/Cordoba" , 0x00329E }, + { "America/Argentina/Jujuy" , 0x003473 }, + { "America/Argentina/La_Rioja" , 0x003627 }, + { "America/Argentina/Mendoza" , 0x0037DF }, + { "America/Argentina/Rio_Gallegos" , 0x00399F }, + { "America/Argentina/Salta" , 0x003B54 }, + { "America/Argentina/San_Juan" , 0x003D00 }, + { "America/Argentina/San_Luis" , 0x003EB8 }, + { "America/Argentina/Tucuman" , 0x00407E }, + { "America/Argentina/Ushuaia" , 0x00423A }, + { "America/Aruba" , 0x0043F5 }, + { "America/Asuncion" , 0x00445B }, + { "America/Atikokan" , 0x004740 }, + { "America/Atka" , 0x004816 }, + { "America/Bahia" , 0x004B7C }, + { "America/Bahia_Banderas" , 0x004D0F }, + { "America/Barbados" , 0x004F88 }, + { "America/Belem" , 0x005022 }, + { "America/Belize" , 0x00511D }, + { "America/Blanc-Sablon" , 0x005299 }, + { "America/Boa_Vista" , 0x00534D }, + { "America/Bogota" , 0x005456 }, + { "America/Boise" , 0x0054C2 }, + { "America/Buenos_Aires" , 0x005859 }, + { "America/Cambridge_Bay" , 0x0059F2 }, + { "America/Campo_Grande" , 0x005D1A }, + { "America/Cancun" , 0x006009 }, + { "America/Caracas" , 0x00624B }, + { "America/Catamarca" , 0x0062B2 }, + { "America/Cayenne" , 0x006458 }, + { "America/Cayman" , 0x0064BA }, + { "America/Chicago" , 0x00650F }, + { "America/Chihuahua" , 0x006A26 }, + { "America/Coral_Harbour" , 0x006C91 }, + { "America/Cordoba" , 0x006D23 }, + { "America/Costa_Rica" , 0x006EC9 }, + { "America/Creston" , 0x006F53 }, + { "America/Cuiaba" , 0x006FDF }, + { "America/Curacao" , 0x0072BD }, + { "America/Danmarkshavn" , 0x007323 }, + { "America/Dawson" , 0x007467 }, + { "America/Dawson_Creek" , 0x007784 }, + { "America/Denver" , 0x00795E }, + { "America/Detroit" , 0x007CE4 }, + { "America/Dominica" , 0x008043 }, + { "America/Edmonton" , 0x008098 }, + { "America/Eirunepe" , 0x008450 }, + { "America/El_Salvador" , 0x008568 }, + { "America/Ensenada" , 0x0085DD }, + { "America/Fort_Wayne" , 0x008A84 }, + { "America/Fortaleza" , 0x008946 }, + { "America/Glace_Bay" , 0x008CEE }, + { "America/Godthab" , 0x009065 }, + { "America/Goose_Bay" , 0x009329 }, + { "America/Grand_Turk" , 0x0097E6 }, + { "America/Grenada" , 0x009A95 }, + { "America/Guadeloupe" , 0x009AEA }, + { "America/Guatemala" , 0x009B3F }, + { "America/Guayaquil" , 0x009BC8 }, + { "America/Guyana" , 0x009C25 }, + { "America/Halifax" , 0x009CA6 }, + { "America/Havana" , 0x00A1BC }, + { "America/Hermosillo" , 0x00A52F }, + { "America/Indiana/Indianapolis" , 0x00A60D }, + { "America/Indiana/Knox" , 0x00A89E }, + { "America/Indiana/Marengo" , 0x00AC35 }, + { "America/Indiana/Petersburg" , 0x00AEDB }, + { "America/Indiana/Tell_City" , 0x00B428 }, + { "America/Indiana/Vevay" , 0x00B6C1 }, + { "America/Indiana/Vincennes" , 0x00B8FC }, + { "America/Indiana/Winamac" , 0x00BBB0 }, + { "America/Indianapolis" , 0x00B1BE }, + { "America/Inuvik" , 0x00BE69 }, + { "America/Iqaluit" , 0x00C160 }, + { "America/Jamaica" , 0x00C482 }, + { "America/Jujuy" , 0x00C547 }, + { "America/Juneau" , 0x00C6F1 }, + { "America/Kentucky/Louisville" , 0x00CA6F }, + { "America/Kentucky/Monticello" , 0x00CE8D }, + { "America/Knox_IN" , 0x00D212 }, + { "America/Kralendijk" , 0x00D583 }, + { "America/La_Paz" , 0x00D5E9 }, + { "America/Lima" , 0x00D650 }, + { "America/Los_Angeles" , 0x00D6F8 }, + { "America/Louisville" , 0x00DB09 }, + { "America/Lower_Princes" , 0x00DEFE }, + { "America/Maceio" , 0x00DF64 }, + { "America/Managua" , 0x00E09E }, + { "America/Manaus" , 0x00E151 }, + { "America/Marigot" , 0x00E253 }, + { "America/Martinique" , 0x00E2A8 }, + { "America/Matamoros" , 0x00E314 }, + { "America/Mazatlan" , 0x00E56D }, + { "America/Mendoza" , 0x00E7DA }, + { "America/Menominee" , 0x00E98E }, + { "America/Merida" , 0x00ED0F }, + { "America/Metlakatla" , 0x00EF4A }, + { "America/Mexico_City" , 0x00F084 }, + { "America/Miquelon" , 0x00F2FF }, + { "America/Moncton" , 0x00F571 }, + { "America/Monterrey" , 0x00FA08 }, + { "America/Montevideo" , 0x00FC6B }, + { "America/Montreal" , 0x00FF7D }, + { "America/Montserrat" , 0x01046D }, + { "America/Nassau" , 0x0104C2 }, + { "America/New_York" , 0x010807 }, + { "America/Nipigon" , 0x010D12 }, + { "America/Nome" , 0x011063 }, + { "America/Noronha" , 0x0113E1 }, + { "America/North_Dakota/Beulah" , 0x011511 }, + { "America/North_Dakota/Center" , 0x0118A5 }, + { "America/North_Dakota/New_Salem" , 0x011C39 }, + { "America/Ojinaga" , 0x011FE2 }, + { "America/Panama" , 0x012243 }, + { "America/Pangnirtung" , 0x012298 }, + { "America/Paramaribo" , 0x0125CE }, + { "America/Phoenix" , 0x012660 }, + { "America/Port-au-Prince" , 0x01271E }, + { "America/Port_of_Spain" , 0x012A42 }, + { "America/Porto_Acre" , 0x01293E }, + { "America/Porto_Velho" , 0x012A97 }, + { "America/Puerto_Rico" , 0x012B8D }, + { "America/Rainy_River" , 0x012BF8 }, + { "America/Rankin_Inlet" , 0x012F30 }, + { "America/Recife" , 0x013216 }, + { "America/Regina" , 0x013340 }, + { "America/Resolute" , 0x0134FE }, + { "America/Rio_Branco" , 0x0137EF }, + { "America/Rosario" , 0x0138F7 }, + { "America/Santa_Isabel" , 0x013A9D }, + { "America/Santarem" , 0x013E40 }, + { "America/Santiago" , 0x013F45 }, + { "America/Santo_Domingo" , 0x0142EE }, + { "America/Sao_Paulo" , 0x0143B4 }, + { "America/Scoresbysund" , 0x0146C3 }, + { "America/Shiprock" , 0x0149B1 }, + { "America/Sitka" , 0x014D2A }, + { "America/St_Barthelemy" , 0x0150B2 }, + { "America/St_Johns" , 0x015107 }, + { "America/St_Kitts" , 0x01565A }, + { "America/St_Lucia" , 0x0156AF }, + { "America/St_Thomas" , 0x015704 }, + { "America/St_Vincent" , 0x015759 }, + { "America/Swift_Current" , 0x0157AE }, + { "America/Tegucigalpa" , 0x0158CF }, + { "America/Thule" , 0x01594E }, + { "America/Thunder_Bay" , 0x015B95 }, + { "America/Tijuana" , 0x015EDE }, + { "America/Toronto" , 0x016277 }, + { "America/Tortola" , 0x016797 }, + { "America/Vancouver" , 0x0167EC }, + { "America/Virgin" , 0x016C29 }, + { "America/Whitehorse" , 0x016C7E }, + { "America/Winnipeg" , 0x016F9B }, + { "America/Yakutat" , 0x0173DB }, + { "America/Yellowknife" , 0x017746 }, + { "Antarctica/Casey" , 0x017A56 }, + { "Antarctica/Davis" , 0x017AF3 }, + { "Antarctica/DumontDUrville" , 0x017B94 }, + { "Antarctica/Macquarie" , 0x017C26 }, + { "Antarctica/Mawson" , 0x017E6D }, + { "Antarctica/McMurdo" , 0x017EE9 }, + { "Antarctica/Palmer" , 0x018294 }, + { "Antarctica/Rothera" , 0x0185B0 }, + { "Antarctica/South_Pole" , 0x018626 }, + { "Antarctica/Syowa" , 0x0189A4 }, + { "Antarctica/Troll" , 0x018A12 }, + { "Antarctica/Vostok" , 0x018BE4 }, + { "Arctic/Longyearbyen" , 0x018C55 }, + { "Asia/Aden" , 0x018F87 }, + { "Asia/Almaty" , 0x018FDC }, + { "Asia/Amman" , 0x01915B }, + { "Asia/Anadyr" , 0x019411 }, + { "Asia/Aqtau" , 0x0195F6 }, + { "Asia/Aqtobe" , 0x0197F5 }, + { "Asia/Ashgabat" , 0x0199AD }, + { "Asia/Ashkhabad" , 0x019ACA }, + { "Asia/Baghdad" , 0x019BE7 }, + { "Asia/Bahrain" , 0x019D5C }, + { "Asia/Baku" , 0x019DC2 }, + { "Asia/Bangkok" , 0x01A0AA }, + { "Asia/Beirut" , 0x01A0FF }, + { "Asia/Bishkek" , 0x01A40C }, + { "Asia/Brunei" , 0x01A5B8 }, + { "Asia/Calcutta" , 0x01A61A }, + { "Asia/Choibalsan" , 0x01A693 }, + { "Asia/Chongqing" , 0x01A80C }, + { "Asia/Chungking" , 0x01A8FB }, + { "Asia/Colombo" , 0x01A9AA }, + { "Asia/Dacca" , 0x01AA46 }, + { "Asia/Damascus" , 0x01AAEC }, + { "Asia/Dhaka" , 0x01AE3C }, + { "Asia/Dili" , 0x01AEE2 }, + { "Asia/Dubai" , 0x01AF6C }, + { "Asia/Dushanbe" , 0x01AFC1 }, + { "Asia/Gaza" , 0x01B0C4 }, + { "Asia/Harbin" , 0x01B417 }, + { "Asia/Hebron" , 0x01B4FE }, + { "Asia/Ho_Chi_Minh" , 0x01B85A }, + { "Asia/Hong_Kong" , 0x01B8D2 }, + { "Asia/Hovd" , 0x01BA94 }, + { "Asia/Irkutsk" , 0x01BC0C }, + { "Asia/Istanbul" , 0x01BDF2 }, + { "Asia/Jakarta" , 0x01C1DF }, + { "Asia/Jayapura" , 0x01C289 }, + { "Asia/Jerusalem" , 0x01C325 }, + { "Asia/Kabul" , 0x01C654 }, + { "Asia/Kamchatka" , 0x01C6A5 }, + { "Asia/Karachi" , 0x01C881 }, + { "Asia/Kashgar" , 0x01C936 }, + { "Asia/Kathmandu" , 0x01CA07 }, + { "Asia/Katmandu" , 0x01CA6D }, + { "Asia/Khandyga" , 0x01CAD3 }, + { "Asia/Kolkata" , 0x01CCF8 }, + { "Asia/Krasnoyarsk" , 0x01CD71 }, + { "Asia/Kuala_Lumpur" , 0x01CF59 }, + { "Asia/Kuching" , 0x01D016 }, + { "Asia/Kuwait" , 0x01D104 }, + { "Asia/Macao" , 0x01D159 }, + { "Asia/Macau" , 0x01D294 }, + { "Asia/Magadan" , 0x01D3CF }, + { "Asia/Makassar" , 0x01D5B1 }, + { "Asia/Manila" , 0x01D676 }, + { "Asia/Muscat" , 0x01D6FB }, + { "Asia/Nicosia" , 0x01D750 }, + { "Asia/Novokuznetsk" , 0x01DA38 }, + { "Asia/Novosibirsk" , 0x01DC3A }, + { "Asia/Omsk" , 0x01DE25 }, + { "Asia/Oral" , 0x01E00C }, + { "Asia/Phnom_Penh" , 0x01E1DC }, + { "Asia/Pontianak" , 0x01E254 }, + { "Asia/Pyongyang" , 0x01E316 }, + { "Asia/Qatar" , 0x01E383 }, + { "Asia/Qyzylorda" , 0x01E3E9 }, + { "Asia/Rangoon" , 0x01E5BF }, + { "Asia/Riyadh" , 0x01E637 }, + { "Asia/Saigon" , 0x01E68C }, + { "Asia/Sakhalin" , 0x01E704 }, + { "Asia/Samarkand" , 0x01E8FB }, + { "Asia/Seoul" , 0x01EA31 }, + { "Asia/Shanghai" , 0x01EAD5 }, + { "Asia/Singapore" , 0x01EBB5 }, + { "Asia/Taipei" , 0x01EC6C }, + { "Asia/Tashkent" , 0x01ED84 }, + { "Asia/Tbilisi" , 0x01EEB5 }, + { "Asia/Tehran" , 0x01F06F }, + { "Asia/Tel_Aviv" , 0x01F2DD }, + { "Asia/Thimbu" , 0x01F60C }, + { "Asia/Thimphu" , 0x01F672 }, + { "Asia/Tokyo" , 0x01F6D8 }, + { "Asia/Ujung_Pandang" , 0x01F761 }, + { "Asia/Ulaanbaatar" , 0x01F7DE }, + { "Asia/Ulan_Bator" , 0x01F939 }, + { "Asia/Urumqi" , 0x01FA86 }, + { "Asia/Ust-Nera" , 0x01FB4D }, + { "Asia/Vientiane" , 0x01FD52 }, + { "Asia/Vladivostok" , 0x01FDCA }, + { "Asia/Yakutsk" , 0x01FFAF }, + { "Asia/Yekaterinburg" , 0x020194 }, + { "Asia/Yerevan" , 0x02039F }, + { "Atlantic/Azores" , 0x02059F }, + { "Atlantic/Bermuda" , 0x020AA2 }, + { "Atlantic/Canary" , 0x020D83 }, + { "Atlantic/Cape_Verde" , 0x021059 }, + { "Atlantic/Faeroe" , 0x0210D2 }, + { "Atlantic/Faroe" , 0x021376 }, + { "Atlantic/Jan_Mayen" , 0x02161A }, + { "Atlantic/Madeira" , 0x02194C }, + { "Atlantic/Reykjavik" , 0x021E55 }, + { "Atlantic/South_Georgia" , 0x02200E }, + { "Atlantic/St_Helena" , 0x022220 }, + { "Atlantic/Stanley" , 0x022052 }, + { "Australia/ACT" , 0x022275 }, + { "Australia/Adelaide" , 0x022592 }, + { "Australia/Brisbane" , 0x0228BE }, + { "Australia/Broken_Hill" , 0x022985 }, + { "Australia/Canberra" , 0x022CC3 }, + { "Australia/Currie" , 0x022FE0 }, + { "Australia/Darwin" , 0x023313 }, + { "Australia/Eucla" , 0x023399 }, + { "Australia/Hobart" , 0x02346E }, + { "Australia/LHI" , 0x0237CC }, + { "Australia/Lindeman" , 0x023A67 }, + { "Australia/Lord_Howe" , 0x023B48 }, + { "Australia/Melbourne" , 0x023DF3 }, + { "Australia/North" , 0x024118 }, + { "Australia/NSW" , 0x02418C }, + { "Australia/Perth" , 0x0244A9 }, + { "Australia/Queensland" , 0x024581 }, + { "Australia/South" , 0x02462D }, + { "Australia/Sydney" , 0x02494A }, + { "Australia/Tasmania" , 0x024C87 }, + { "Australia/Victoria" , 0x024FCC }, + { "Australia/West" , 0x0252E9 }, + { "Australia/Yancowinna" , 0x02539F }, + { "Brazil/Acre" , 0x0256C1 }, + { "Brazil/DeNoronha" , 0x0257C5 }, + { "Brazil/East" , 0x0258E5 }, + { "Brazil/West" , 0x025BC2 }, + { "Canada/Atlantic" , 0x025CBA }, + { "Canada/Central" , 0x0261A2 }, + { "Canada/East-Saskatchewan" , 0x026AAC }, + { "Canada/Eastern" , 0x0265BC }, + { "Canada/Mountain" , 0x026C35 }, + { "Canada/Newfoundland" , 0x026FAB }, + { "Canada/Pacific" , 0x0274D6 }, + { "Canada/Saskatchewan" , 0x0278EF }, + { "Canada/Yukon" , 0x027A78 }, + { "CET" , 0x027D7B }, + { "Chile/Continental" , 0x028084 }, + { "Chile/EasterIsland" , 0x02841F }, + { "CST6CDT" , 0x028761 }, + { "Cuba" , 0x028AB2 }, + { "EET" , 0x028E25 }, + { "Egypt" , 0x0290D8 }, + { "Eire" , 0x0294BF }, + { "EST" , 0x0299D0 }, + { "EST5EDT" , 0x029A14 }, + { "Etc/GMT" , 0x029D65 }, + { "Etc/GMT+0" , 0x029E31 }, + { "Etc/GMT+1" , 0x029EBB }, + { "Etc/GMT+10" , 0x029F48 }, + { "Etc/GMT+11" , 0x029FD6 }, + { "Etc/GMT+12" , 0x02A064 }, + { "Etc/GMT+2" , 0x02A17F }, + { "Etc/GMT+3" , 0x02A20B }, + { "Etc/GMT+4" , 0x02A297 }, + { "Etc/GMT+5" , 0x02A323 }, + { "Etc/GMT+6" , 0x02A3AF }, + { "Etc/GMT+7" , 0x02A43B }, + { "Etc/GMT+8" , 0x02A4C7 }, + { "Etc/GMT+9" , 0x02A553 }, + { "Etc/GMT-0" , 0x029DED }, + { "Etc/GMT-1" , 0x029E75 }, + { "Etc/GMT-10" , 0x029F01 }, + { "Etc/GMT-11" , 0x029F8F }, + { "Etc/GMT-12" , 0x02A01D }, + { "Etc/GMT-13" , 0x02A0AB }, + { "Etc/GMT-14" , 0x02A0F2 }, + { "Etc/GMT-2" , 0x02A139 }, + { "Etc/GMT-3" , 0x02A1C5 }, + { "Etc/GMT-4" , 0x02A251 }, + { "Etc/GMT-5" , 0x02A2DD }, + { "Etc/GMT-6" , 0x02A369 }, + { "Etc/GMT-7" , 0x02A3F5 }, + { "Etc/GMT-8" , 0x02A481 }, + { "Etc/GMT-9" , 0x02A50D }, + { "Etc/GMT0" , 0x029DA9 }, + { "Etc/Greenwich" , 0x02A599 }, + { "Etc/UCT" , 0x02A5DD }, + { "Etc/Universal" , 0x02A621 }, + { "Etc/UTC" , 0x02A665 }, + { "Etc/Zulu" , 0x02A6A9 }, + { "Europe/Amsterdam" , 0x02A6ED }, + { "Europe/Andorra" , 0x02AB2B }, + { "Europe/Athens" , 0x02ADA7 }, + { "Europe/Belfast" , 0x02B0EA }, + { "Europe/Belgrade" , 0x02B621 }, + { "Europe/Berlin" , 0x02B8EA }, + { "Europe/Bratislava" , 0x02BC4E }, + { "Europe/Brussels" , 0x02BF80 }, + { "Europe/Bucharest" , 0x02C3B7 }, + { "Europe/Budapest" , 0x02C6E1 }, + { "Europe/Busingen" , 0x02CA54 }, + { "Europe/Chisinau" , 0x02CD0B }, + { "Europe/Copenhagen" , 0x02D099 }, + { "Europe/Dublin" , 0x02D3A3 }, + { "Europe/Gibraltar" , 0x02D8B4 }, + { "Europe/Guernsey" , 0x02DD0B }, + { "Europe/Helsinki" , 0x02E242 }, + { "Europe/Isle_of_Man" , 0x02E4F8 }, + { "Europe/Istanbul" , 0x02EA2F }, + { "Europe/Jersey" , 0x02EE1C }, + { "Europe/Kaliningrad" , 0x02F353 }, + { "Europe/Kiev" , 0x02F5B9 }, + { "Europe/Lisbon" , 0x02F8D5 }, + { "Europe/Ljubljana" , 0x02FDD9 }, + { "Europe/London" , 0x0300A2 }, + { "Europe/Luxembourg" , 0x0305D9 }, + { "Europe/Madrid" , 0x030A2F }, + { "Europe/Malta" , 0x030DF5 }, + { "Europe/Mariehamn" , 0x0311AE }, + { "Europe/Minsk" , 0x031464 }, + { "Europe/Monaco" , 0x031672 }, + { "Europe/Moscow" , 0x031AAD }, + { "Europe/Nicosia" , 0x031D02 }, + { "Europe/Oslo" , 0x031FEA }, + { "Europe/Paris" , 0x03231C }, + { "Europe/Podgorica" , 0x032762 }, + { "Europe/Prague" , 0x032A2B }, + { "Europe/Riga" , 0x032D5D }, + { "Europe/Rome" , 0x0330A2 }, + { "Europe/Samara" , 0x033465 }, + { "Europe/San_Marino" , 0x033698 }, + { "Europe/Sarajevo" , 0x033A5B }, + { "Europe/Simferopol" , 0x033D24 }, + { "Europe/Skopje" , 0x033F70 }, + { "Europe/Sofia" , 0x034239 }, + { "Europe/Stockholm" , 0x034541 }, + { "Europe/Tallinn" , 0x0347F0 }, + { "Europe/Tirane" , 0x034B2A }, + { "Europe/Tiraspol" , 0x034E30 }, + { "Europe/Uzhgorod" , 0x0351BE }, + { "Europe/Vaduz" , 0x0354D5 }, + { "Europe/Vatican" , 0x035784 }, + { "Europe/Vienna" , 0x035B47 }, + { "Europe/Vilnius" , 0x035E74 }, + { "Europe/Volgograd" , 0x0361B3 }, + { "Europe/Warsaw" , 0x0363B3 }, + { "Europe/Zagreb" , 0x036794 }, + { "Europe/Zaporozhye" , 0x036A5D }, + { "Europe/Zurich" , 0x036D9E }, + { "Factory" , 0x03704D }, + { "GB" , 0x0370BE }, + { "GB-Eire" , 0x0375F5 }, + { "GMT" , 0x037B2C }, + { "GMT+0" , 0x037BF8 }, + { "GMT-0" , 0x037BB4 }, + { "GMT0" , 0x037B70 }, + { "Greenwich" , 0x037C3C }, + { "Hongkong" , 0x037C80 }, + { "HST" , 0x037E42 }, + { "Iceland" , 0x037E86 }, + { "Indian/Antananarivo" , 0x03803F }, + { "Indian/Chagos" , 0x0380B3 }, + { "Indian/Christmas" , 0x038115 }, + { "Indian/Cocos" , 0x038159 }, + { "Indian/Comoro" , 0x03819D }, + { "Indian/Kerguelen" , 0x0381F2 }, + { "Indian/Mahe" , 0x038247 }, + { "Indian/Maldives" , 0x03829C }, + { "Indian/Mauritius" , 0x0382F1 }, + { "Indian/Mayotte" , 0x038367 }, + { "Indian/Reunion" , 0x0383BC }, + { "Iran" , 0x038411 }, + { "Israel" , 0x03867F }, + { "Jamaica" , 0x0389AE }, + { "Japan" , 0x038A73 }, + { "Kwajalein" , 0x038AFC }, + { "Libya" , 0x038B5F }, + { "MET" , 0x038C68 }, + { "Mexico/BajaNorte" , 0x038F71 }, + { "Mexico/BajaSur" , 0x0392DA }, + { "Mexico/General" , 0x03951F }, + { "MST" , 0x03977D }, + { "MST7MDT" , 0x0397C1 }, + { "Navajo" , 0x039B12 }, + { "NZ" , 0x039E8B }, + { "NZ-CHAT" , 0x03A209 }, + { "Pacific/Apia" , 0x03A4F1 }, + { "Pacific/Auckland" , 0x03A68D }, + { "Pacific/Chatham" , 0x03AA19 }, + { "Pacific/Chuuk" , 0x03AD10 }, + { "Pacific/Easter" , 0x03AD69 }, + { "Pacific/Efate" , 0x03B0C7 }, + { "Pacific/Enderbury" , 0x03B18D }, + { "Pacific/Fakaofo" , 0x03B1FB }, + { "Pacific/Fiji" , 0x03B24C }, + { "Pacific/Funafuti" , 0x03B3DF }, + { "Pacific/Galapagos" , 0x03B423 }, + { "Pacific/Gambier" , 0x03B49B }, + { "Pacific/Guadalcanal" , 0x03B500 }, + { "Pacific/Guam" , 0x03B555 }, + { "Pacific/Honolulu" , 0x03B5AB }, + { "Pacific/Johnston" , 0x03B622 }, + { "Pacific/Kiritimati" , 0x03B6A1 }, + { "Pacific/Kosrae" , 0x03B70C }, + { "Pacific/Kwajalein" , 0x03B769 }, + { "Pacific/Majuro" , 0x03B7D5 }, + { "Pacific/Marquesas" , 0x03B834 }, + { "Pacific/Midway" , 0x03B89B }, + { "Pacific/Nauru" , 0x03B925 }, + { "Pacific/Niue" , 0x03B99D }, + { "Pacific/Norfolk" , 0x03B9FB }, + { "Pacific/Noumea" , 0x03BA50 }, + { "Pacific/Pago_Pago" , 0x03BAE0 }, + { "Pacific/Palau" , 0x03BB69 }, + { "Pacific/Pitcairn" , 0x03BBAD }, + { "Pacific/Pohnpei" , 0x03BC02 }, + { "Pacific/Ponape" , 0x03BC57 }, + { "Pacific/Port_Moresby" , 0x03BC9C }, + { "Pacific/Rarotonga" , 0x03BCE0 }, + { "Pacific/Saipan" , 0x03BDBC }, + { "Pacific/Samoa" , 0x03BE1F }, + { "Pacific/Tahiti" , 0x03BEA8 }, + { "Pacific/Tarawa" , 0x03BF0D }, + { "Pacific/Tongatapu" , 0x03BF61 }, + { "Pacific/Truk" , 0x03BFED }, + { "Pacific/Wake" , 0x03C032 }, + { "Pacific/Wallis" , 0x03C082 }, + { "Pacific/Yap" , 0x03C0C6 }, + { "Poland" , 0x03C10B }, + { "Portugal" , 0x03C4EC }, + { "PRC" , 0x03C9E8 }, + { "PST8PDT" , 0x03CA99 }, + { "ROC" , 0x03CDEA }, + { "ROK" , 0x03CF02 }, + { "Singapore" , 0x03CFA6 }, + { "Turkey" , 0x03D05D }, + { "UCT" , 0x03D44A }, + { "Universal" , 0x03D48E }, + { "US/Alaska" , 0x03D4D2 }, + { "US/Aleutian" , 0x03D83B }, + { "US/Arizona" , 0x03DBA1 }, + { "US/Central" , 0x03DC2F }, + { "US/East-Indiana" , 0x03E639 }, + { "US/Eastern" , 0x03E13A }, + { "US/Hawaii" , 0x03E8A3 }, + { "US/Indiana-Starke" , 0x03E914 }, + { "US/Michigan" , 0x03EC85 }, + { "US/Mountain" , 0x03EFBC }, + { "US/Pacific" , 0x03F335 }, + { "US/Pacific-New" , 0x03F73A }, + { "US/Samoa" , 0x03FB3F }, + { "UTC" , 0x03FBC8 }, + { "W-SU" , 0x03FEBF }, + { "WET" , 0x03FC0C }, + { "Zulu" , 0x0400FD }, }; /* This is a generated file, do not modify */ -const unsigned char timelib_timezone_db_data_builtin[262480] = { +const unsigned char timelib_timezone_db_data_builtin[262465] = { /* Africa/Abidjan */ @@ -711,8 +711,8 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { /* Africa/Cairo */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x45, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, 0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xDF, 0x29, 0xD0, 0xCD, 0xAC, 0xE1, 0xE0, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xAD, 0x50, 0xE8, 0x36, 0x63, 0x60, @@ -743,14 +743,14 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0, -0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAF, 0x3A, 0xE0, 0x53, 0xD6, 0xC7, 0xE0, -0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x81, 0xED, 0xE0, 0x55, 0xA9, 0x7A, 0xE0, -0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x55, 0xF2, 0x60, 0x57, 0x7D, 0x7F, 0x60, -0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x28, 0xA5, 0x60, 0x59, 0x50, 0x32, 0x60, -0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xFB, 0x58, 0x60, 0x5B, 0x22, 0xE5, 0x60, -0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCF, 0x5C, 0xE0, 0x5C, 0xF6, 0xE9, 0xE0, -0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xC9, 0x9C, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9C, 0x4F, 0xE0, -0x61, 0x56, 0x25, 0x50, 0x62, 0x70, 0x54, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, +0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAC, 0x89, 0xD0, 0x53, 0xDA, 0xBC, 0x60, +0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0, +0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x50, 0x9E, 0x50, 0x57, 0x7E, 0xD0, 0xE0, +0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x27, 0x45, 0xD0, 0x59, 0x55, 0x78, 0x60, +0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xF4, 0xB2, 0xD0, 0x5B, 0x22, 0xE5, 0x60, +0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCB, 0x5A, 0x50, 0x5C, 0xF9, 0x8C, 0xE0, +0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xD0, 0x34, 0x60, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9D, 0xA1, 0x60, +0x61, 0x56, 0x25, 0x50, 0x62, 0x74, 0x48, 0xE0, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, 0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, 0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, @@ -763,16 +763,16 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, 0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, +0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x45, 0x45, 0x53, 0x54, +0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xB7, 0x2E, 0x88, 0x01, +0x42, 0x57, 0x88, 0x00, 0x00, 0x00, 0x00, /* Africa/Casablanca */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x4D, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -786,23 +786,23 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x4A, 0x23, 0x1A, 0x00, 0x4A, 0x8D, 0xD5, 0x70, 0x4B, 0xDC, 0xC0, 0x80, 0x4C, 0x5D, 0xE5, 0x70, 0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x08, 0xBB, 0xA0, 0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x51, 0xD8, 0xCB, 0xA0, -0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAF, 0x73, 0x20, -0x53, 0xD7, 0x00, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, 0x55, 0x82, 0x26, 0x20, -0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x56, 0x2A, 0xA0, -0x57, 0x7D, 0xB7, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, 0x59, 0x28, 0xDD, 0xA0, -0x59, 0x50, 0x6A, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xFB, 0x90, 0xA0, -0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCF, 0x95, 0x20, -0x5C, 0xF7, 0x22, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, 0x5E, 0xA2, 0x48, 0x20, -0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, 0x60, 0x74, 0xFB, 0x20, -0x60, 0x9C, 0x88, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, 0x62, 0x48, 0xFF, 0xA0, -0x62, 0x70, 0x8C, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, 0x65, 0x3D, 0xBC, 0xA0, -0x66, 0x15, 0xF2, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xE9, 0xF7, 0x20, 0x68, 0xFD, 0x80, 0xA0, +0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, 0x53, 0xAE, 0x21, 0xA0, +0x53, 0xDC, 0x46, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, 0x55, 0x7B, 0x8E, 0xA0, +0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, 0x57, 0x52, 0x36, 0x20, +0x57, 0x80, 0x5A, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, 0x59, 0x1F, 0xA3, 0x20, +0x59, 0x57, 0x02, 0x20, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, 0x5A, 0xF6, 0x4A, 0xA0, +0x5B, 0x24, 0x6F, 0x20, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, 0x5C, 0xCC, 0xF2, 0x20, +0x5C, 0xFB, 0x16, 0xA0, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, 0x5E, 0x9A, 0x5F, 0x20, +0x5E, 0xD1, 0xBE, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, 0x60, 0x71, 0x06, 0xA0, +0x60, 0x9F, 0x2B, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, 0x62, 0x47, 0xAE, 0x20, +0x62, 0x75, 0xD2, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, 0x65, 0x3D, 0xBC, 0xA0, +0x66, 0x19, 0xE7, 0x20, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF0, 0x8E, 0xA0, 0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0, -0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCE, 0xC9, 0xA0, -0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA8, 0x14, 0x20, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x7C, 0x18, 0xA0, +0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, 0x7B, 0xCD, 0x78, 0x20, +0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA4, 0x1F, 0xA0, 0x7E, 0x79, 0xB2, 0xA0, 0x7F, 0x7A, 0xC7, 0x20, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, @@ -919,23 +919,23 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x4C, 0x5D, 0xE5, 0x70, 0x4D, 0x97, 0xB8, 0x80, 0x4E, 0x34, 0x8C, 0xF0, 0x4F, 0x9C, 0xA0, 0xA0, 0x50, 0x08, 0xBB, 0xA0, 0x50, 0x31, 0x9A, 0x20, 0x50, 0x67, 0xA7, 0xA0, 0x51, 0x7C, 0x82, 0xA0, 0x51, 0xD8, 0xCB, 0xA0, 0x52, 0x05, 0x9E, 0xA0, 0x52, 0x6C, 0x73, 0xA0, 0x53, 0x37, 0x7A, 0xA0, -0x53, 0xAF, 0x73, 0x20, 0x53, 0xD7, 0x00, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, -0x55, 0x82, 0x26, 0x20, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, -0x57, 0x56, 0x2A, 0xA0, 0x57, 0x7D, 0xB7, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, -0x59, 0x28, 0xDD, 0xA0, 0x59, 0x50, 0x6A, 0xA0, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, -0x5A, 0xFB, 0x90, 0xA0, 0x5B, 0x23, 0x1D, 0xA0, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, -0x5C, 0xCF, 0x95, 0x20, 0x5C, 0xF7, 0x22, 0x20, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, -0x5E, 0xA2, 0x48, 0x20, 0x5E, 0xC9, 0xD5, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, -0x60, 0x74, 0xFB, 0x20, 0x60, 0x9C, 0x88, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, -0x62, 0x48, 0xFF, 0xA0, 0x62, 0x70, 0x8C, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, -0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x15, 0xF2, 0xA0, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xE9, 0xF7, 0x20, +0x53, 0xAE, 0x21, 0xA0, 0x53, 0xDC, 0x46, 0x20, 0x54, 0x4C, 0x55, 0xA0, 0x55, 0x17, 0x5C, 0xA0, +0x55, 0x7B, 0x8E, 0xA0, 0x55, 0xA9, 0xB3, 0x20, 0x56, 0x2C, 0x37, 0xA0, 0x56, 0xF7, 0x3E, 0xA0, +0x57, 0x52, 0x36, 0x20, 0x57, 0x80, 0x5A, 0xA0, 0x58, 0x15, 0x54, 0x20, 0x58, 0xD7, 0x20, 0xA0, +0x59, 0x1F, 0xA3, 0x20, 0x59, 0x57, 0x02, 0x20, 0x59, 0xF5, 0x36, 0x20, 0x5A, 0xB7, 0x02, 0xA0, +0x5A, 0xF6, 0x4A, 0xA0, 0x5B, 0x24, 0x6F, 0x20, 0x5B, 0xD5, 0x18, 0x20, 0x5C, 0xA0, 0x1F, 0x20, +0x5C, 0xCC, 0xF2, 0x20, 0x5C, 0xFB, 0x16, 0xA0, 0x5D, 0xB4, 0xFA, 0x20, 0x5E, 0x80, 0x01, 0x20, +0x5E, 0x9A, 0x5F, 0x20, 0x5E, 0xD1, 0xBE, 0x20, 0x5F, 0x94, 0xDC, 0x20, 0x60, 0x5F, 0xE3, 0x20, +0x60, 0x71, 0x06, 0xA0, 0x60, 0x9F, 0x2B, 0x20, 0x61, 0x7D, 0xF8, 0xA0, 0x62, 0x3F, 0xC5, 0x20, +0x62, 0x47, 0xAE, 0x20, 0x62, 0x75, 0xD2, 0xA0, 0x63, 0x5D, 0xDA, 0xA0, 0x64, 0x43, 0x3F, 0xA0, +0x65, 0x3D, 0xBC, 0xA0, 0x66, 0x19, 0xE7, 0x20, 0x67, 0x1D, 0x9E, 0xA0, 0x67, 0xF0, 0x8E, 0xA0, 0x68, 0xFD, 0x80, 0xA0, 0x69, 0xC8, 0x87, 0xA0, 0x6A, 0xDD, 0x62, 0xA0, 0x6B, 0xA8, 0x69, 0xA0, 0x6C, 0xC6, 0x7F, 0x20, 0x6D, 0x88, 0x4B, 0xA0, 0x6E, 0xA6, 0x61, 0x20, 0x6F, 0x68, 0x2D, 0xA0, 0x70, 0x86, 0x43, 0x20, 0x71, 0x51, 0x4A, 0x20, 0x72, 0x66, 0x25, 0x20, 0x73, 0x31, 0x2C, 0x20, 0x74, 0x46, 0x07, 0x20, 0x75, 0x11, 0x0E, 0x20, 0x76, 0x2F, 0x23, 0xA0, 0x76, 0xF0, 0xF0, 0x20, 0x78, 0x0F, 0x05, 0xA0, 0x78, 0xD0, 0xD2, 0x20, 0x79, 0xEE, 0xE7, 0xA0, 0x7A, 0xB0, 0xB4, 0x20, -0x7B, 0xCE, 0xC9, 0xA0, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA8, 0x14, 0x20, 0x7E, 0x79, 0xB2, 0xA0, -0x7F, 0x7C, 0x18, 0xA0, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, +0x7B, 0xCD, 0x78, 0x20, 0x7C, 0x99, 0xD0, 0xA0, 0x7D, 0xA4, 0x1F, 0xA0, 0x7E, 0x79, 0xB2, 0xA0, +0x7F, 0x7A, 0xC7, 0x20, 0x01, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, @@ -9553,7 +9553,7 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { /* Asia/Vladivostok */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x16, 0xA7, 0x59, 0x47, 0x50, +0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0F, 0xA7, 0x59, 0x47, 0x50, 0xB5, 0xA3, 0xB6, 0xF0, 0x15, 0x27, 0x45, 0x60, 0x16, 0x18, 0x79, 0xD0, 0x17, 0x08, 0x78, 0xE0, 0x17, 0xF9, 0xAD, 0x50, 0x18, 0xE9, 0xAC, 0x60, 0x19, 0xDA, 0xE0, 0xD0, 0x1A, 0xCC, 0x31, 0x60, 0x1B, 0xBC, 0x3E, 0x80, 0x1C, 0xAC, 0x2F, 0x80, 0x1D, 0x9C, 0x20, 0x80, 0x1E, 0x8C, 0x11, 0x80, @@ -9576,12 +9576,12 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x05, 0x04, 0x08, 0x00, 0x00, 0x7B, 0xB0, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x8C, 0xA0, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x01, 0x09, -0x00, 0x00, 0x8C, 0xA0, 0x01, 0x0F, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x09, 0x00, 0x00, 0x9A, 0xB0, +0x00, 0x00, 0x8C, 0xA0, 0x01, 0x09, 0x00, 0x00, 0x7E, 0x90, 0x00, 0x04, 0x00, 0x00, 0x9A, 0xB0, 0x00, 0x04, 0x4C, 0x4D, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x54, 0x00, 0x56, 0x4C, 0x41, 0x53, 0x54, -0x00, 0x56, 0x4C, 0x41, 0x53, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x3A, 0x01, 0xDB, -0xF8, 0xF5, 0x00, 0x00, 0x00, 0x16, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20, -0x2D, 0x20, 0x41, 0x6D, 0x75, 0x72, 0x20, 0x52, 0x69, 0x76, 0x65, 0x72, +0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0xCB, 0x32, 0x3A, 0x01, 0xDB, 0xF8, 0xF5, 0x00, 0x00, 0x00, 0x16, 0x4D, +0x6F, 0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x37, 0x20, 0x2D, 0x20, 0x41, 0x6D, 0x75, 0x72, 0x20, +0x52, 0x69, 0x76, 0x65, 0x72, /* Asia/Yakutsk */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -12053,8 +12053,8 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { /* Egypt */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xB6, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xC8, 0x93, 0xB4, 0xE0, 0xC8, 0xFA, 0x7B, 0xD0, 0xC9, 0xFC, 0xEF, 0xE0, 0xCA, 0xC7, 0xE8, 0xD0, 0xCB, 0xCB, 0xAE, 0x60, 0xCC, 0xDF, 0x29, 0xD0, 0xCD, 0xAC, 0xE1, 0xE0, 0xCE, 0xC6, 0xF4, 0xD0, 0xCF, 0x8F, 0x66, 0xE0, 0xD0, 0xA9, 0x79, 0xD0, 0xD1, 0x84, 0x60, 0xE0, 0xD2, 0x8A, 0xAD, 0x50, 0xE8, 0x36, 0x63, 0x60, @@ -12085,14 +12085,14 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x43, 0x3C, 0x55, 0xD0, 0x44, 0x51, 0x3E, 0xE0, 0x45, 0x12, 0xFD, 0x50, 0x46, 0x31, 0x20, 0xE0, 0x46, 0xE0, 0x6A, 0x50, 0x48, 0x11, 0x02, 0xE0, 0x48, 0xB7, 0x11, 0xD0, 0x49, 0xF0, 0xE4, 0xE0, 0x4A, 0x8D, 0xB9, 0x50, 0x4B, 0xDA, 0x01, 0x60, 0x4C, 0x61, 0xBD, 0xD0, 0x4C, 0x89, 0x58, 0xE0, -0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAF, 0x3A, 0xE0, 0x53, 0xD6, 0xC7, 0xE0, -0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x81, 0xED, 0xE0, 0x55, 0xA9, 0x7A, 0xE0, -0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x55, 0xF2, 0x60, 0x57, 0x7D, 0x7F, 0x60, -0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x28, 0xA5, 0x60, 0x59, 0x50, 0x32, 0x60, -0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xFB, 0x58, 0x60, 0x5B, 0x22, 0xE5, 0x60, -0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCF, 0x5C, 0xE0, 0x5C, 0xF6, 0xE9, 0xE0, -0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xC9, 0x9C, 0xE0, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9C, 0x4F, 0xE0, -0x61, 0x56, 0x25, 0x50, 0x62, 0x70, 0x54, 0x60, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, +0x4C, 0xA4, 0xFA, 0x50, 0x53, 0x75, 0x38, 0xE0, 0x53, 0xAC, 0x89, 0xD0, 0x53, 0xDA, 0xBC, 0x60, +0x54, 0x24, 0x82, 0x50, 0x55, 0x39, 0x6B, 0x60, 0x55, 0x79, 0xF6, 0xD0, 0x55, 0xB1, 0x63, 0xE0, +0x56, 0x04, 0x64, 0x50, 0x57, 0x22, 0x87, 0xE0, 0x57, 0x50, 0x9E, 0x50, 0x57, 0x7E, 0xD0, 0xE0, +0x57, 0xED, 0x80, 0xD0, 0x59, 0x02, 0x69, 0xE0, 0x59, 0x27, 0x45, 0xD0, 0x59, 0x55, 0x78, 0x60, +0x59, 0xCD, 0x62, 0xD0, 0x5A, 0xE2, 0x4B, 0xE0, 0x5A, 0xF4, 0xB2, 0xD0, 0x5B, 0x22, 0xE5, 0x60, +0x5B, 0xAD, 0x44, 0xD0, 0x5C, 0xC2, 0x2D, 0xE0, 0x5C, 0xCB, 0x5A, 0x50, 0x5C, 0xF9, 0x8C, 0xE0, +0x5D, 0x8D, 0x26, 0xD0, 0x5E, 0xD0, 0x34, 0x60, 0x5F, 0x6D, 0x08, 0xD0, 0x60, 0x9D, 0xA1, 0x60, +0x61, 0x56, 0x25, 0x50, 0x62, 0x74, 0x48, 0xE0, 0x63, 0x36, 0x07, 0x50, 0x64, 0x4A, 0xF0, 0x60, 0x65, 0x15, 0xE9, 0x50, 0x66, 0x2A, 0xD2, 0x60, 0x66, 0xF5, 0xCB, 0x50, 0x68, 0x0A, 0xB4, 0x60, 0x68, 0xD5, 0xAD, 0x50, 0x69, 0xEA, 0x96, 0x60, 0x6A, 0xB5, 0x8F, 0x50, 0x6B, 0xD3, 0xB2, 0xE0, 0x6C, 0x9E, 0xAB, 0xD0, 0x6D, 0xB3, 0x94, 0xE0, 0x6E, 0x7E, 0x8D, 0xD0, 0x6F, 0x93, 0x76, 0xE0, @@ -12105,16 +12105,16 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, -0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x01, 0x00, 0x03, 0x00, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, -0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, -0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x00, 0x00, 0x1C, 0x20, -0x00, 0x05, 0x45, 0x45, 0x53, 0x54, 0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, -0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, +0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, +0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x02, 0x01, +0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, +0x00, 0x00, 0x1C, 0x20, 0x00, 0x05, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x00, 0x45, 0x45, 0x53, 0x54, +0x00, 0x45, 0x45, 0x54, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, +0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, /* Eire */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -14441,7 +14441,7 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { /* Europe/Moscow */ 0x50, 0x48, 0x50, 0x31, 0x01, 0x52, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x9B, 0x5F, 0x1E, 0xD8, +0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x9B, 0x5F, 0x1E, 0xD8, 0x9D, 0x3E, 0xF2, 0x98, 0x9E, 0x2A, 0xEF, 0x18, 0x9E, 0xF7, 0x39, 0x88, 0x9F, 0x84, 0x58, 0x18, 0xA0, 0xD8, 0x6D, 0x08, 0xA1, 0x00, 0x16, 0x28, 0xA1, 0x3C, 0xA6, 0x40, 0xA4, 0x10, 0x6D, 0xC0, 0xA4, 0x3D, 0x32, 0xB0, 0xA5, 0x15, 0x68, 0xB0, 0xA5, 0x3D, 0x03, 0xC0, 0xA7, 0x1E, 0x45, 0x50, @@ -14468,15 +14468,15 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0C, 0x00, 0x00, 0x23, 0x28, 0x00, 0x00, 0x00, 0x00, 0x31, 0x68, 0x01, 0x04, 0x00, 0x00, 0x23, 0x58, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x78, 0x01, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x46, 0x50, -0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, -0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, +0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, +0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44, -0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, -0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xDE, -0x65, 0x98, 0x01, 0x4C, 0x01, 0x7D, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, 0x73, 0x63, 0x6F, 0x77, -0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x52, 0x75, 0x73, 0x73, 0x69, -0x61, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4D, 0x00, 0x45, +0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xDE, 0x65, 0x98, 0x01, 0x4C, 0x01, 0x7D, 0x00, 0x00, 0x00, 0x17, 0x4D, 0x6F, +0x73, 0x63, 0x6F, 0x77, 0x2B, 0x30, 0x30, 0x20, 0x2D, 0x20, 0x77, 0x65, 0x73, 0x74, 0x20, 0x52, +0x75, 0x73, 0x73, 0x69, 0x61, /* Europe/Nicosia */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -18429,7 +18429,7 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { /* W-SU */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x1E, 0x9B, 0x5F, 0x1E, 0xD8, +0x00, 0x00, 0x00, 0x4C, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x22, 0x9B, 0x5F, 0x1E, 0xD8, 0x9D, 0x3E, 0xF2, 0x98, 0x9E, 0x2A, 0xEF, 0x18, 0x9E, 0xF7, 0x39, 0x88, 0x9F, 0x84, 0x58, 0x18, 0xA0, 0xD8, 0x6D, 0x08, 0xA1, 0x00, 0x16, 0x28, 0xA1, 0x3C, 0xA6, 0x40, 0xA4, 0x10, 0x6D, 0xC0, 0xA4, 0x3D, 0x32, 0xB0, 0xA5, 0x15, 0x68, 0xB0, 0xA5, 0x3D, 0x03, 0xC0, 0xA7, 0x1E, 0x45, 0x50, @@ -18456,13 +18456,13 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x08, 0x09, 0x08, 0x09, 0x08, 0x09, 0x08, 0x0C, 0x00, 0x00, 0x23, 0x28, 0x00, 0x00, 0x00, 0x00, 0x31, 0x68, 0x01, 0x04, 0x00, 0x00, 0x23, 0x58, 0x00, 0x00, 0x00, 0x00, 0x3F, 0x78, 0x01, 0x08, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, 0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x46, 0x50, -0x01, 0x11, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, -0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x19, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x15, +0x01, 0x15, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19, 0x00, 0x00, 0x2A, 0x30, 0x00, 0x0D, 0x00, 0x00, +0x38, 0x40, 0x01, 0x11, 0x00, 0x00, 0x2A, 0x30, 0x01, 0x1D, 0x00, 0x00, 0x1C, 0x20, 0x00, 0x19, 0x00, 0x00, 0x38, 0x40, 0x00, 0x0D, 0x4D, 0x4D, 0x54, 0x00, 0x4D, 0x53, 0x54, 0x00, 0x4D, 0x44, -0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x45, 0x45, 0x54, 0x00, 0x45, -0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x01, -0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x89, -0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, +0x53, 0x54, 0x00, 0x4D, 0x53, 0x4B, 0x00, 0x4D, 0x53, 0x44, 0x00, 0x4D, 0x53, 0x4D, 0x00, 0x45, +0x45, 0x54, 0x00, 0x45, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, /* Zulu */ 0x50, 0x48, 0x50, 0x31, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -18471,4 +18471,4 @@ const unsigned char timelib_timezone_db_data_builtin[262480] = { 0x00, 0x00, 0x55, 0x54, 0x43, 0x00, 0x00, 0x00, 0x00, 0x89, 0x54, 0x40, 0x01, 0x12, 0xA8, 0x80, 0x00, 0x00, 0x00, 0x00, }; -const timelib_tzdb timezonedb_builtin = { "2014.3", 580, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2014.5", 580, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/date/php_date.c b/ext/date/php_date.c index e8a7ebfe1..1809d6653 100644 --- a/ext/date/php_date.c +++ b/ext/date/php_date.c @@ -2582,6 +2582,8 @@ PHPAPI int php_date_initialize(php_date_obj *dateobj, /*const*/ char *time_str, err->error_messages[0].position, err->error_messages[0].character, err->error_messages[0].message); } if (err && err->error_count) { + timelib_time_dtor(dateobj->time); + dateobj->time = 0; return 0; } @@ -2729,9 +2731,7 @@ PHP_METHOD(DateTime, __construct) zend_replace_error_handling(EH_THROW, NULL, &error_handling TSRMLS_CC); if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|sO!", &time_str, &time_str_len, &timezone_object, date_ce_timezone)) { - if (!php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC)) { - ZVAL_NULL(getThis()); - } + php_date_initialize(zend_object_store_get_object(getThis() TSRMLS_CC), time_str, time_str_len, NULL, timezone_object, 1 TSRMLS_CC); } zend_restore_error_handling(&error_handling TSRMLS_CC); } diff --git a/ext/date/tests/bug41523.phpt b/ext/date/tests/bug41523.phpt index 05c591f06..68fe1bd6a 100644 --- a/ext/date/tests/bug41523.phpt +++ b/ext/date/tests/bug41523.phpt @@ -46,7 +46,7 @@ array(12) { bool(false) object(DateTime)#1 (3) { ["date"]=> - string(20) "-0001-11-30 00:00:00.000000" + string(27) "-0001-11-30 00:00:00.000000" ["timezone_type"]=> int(3) ["timezone"]=> diff --git a/ext/date/tests/bug67118.phpt b/ext/date/tests/bug67118.phpt index 637175764..973b4eb8d 100644 --- a/ext/date/tests/bug67118.phpt +++ b/ext/date/tests/bug67118.phpt @@ -1,5 +1,5 @@ --TEST-- -Bug #67118 php-cgi crashes regularly on IIS 7 +Bug #67118 crashes in DateTime when this used after failed __construct --INI-- date.timezone=Europe/Berlin --FILE-- @@ -11,17 +11,17 @@ class mydt extends datetime if (!empty($tz) && !is_object($tz)) { $tz = new DateTimeZone($tz); } - - @parent::__construct($time, $tz); + try { + @parent::__construct($time, $tz); + } catch (Exception $e) { + echo "Bad date" . $this->format("Y") . "\n"; + } } }; new mydt("Funktionsansvarig rådgivning och juridik", "UTC"); +?> --EXPECTF-- -Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct(): Failed to parse time string (Funktionsansvarig rådgivning och juridik) at position 0 (F): The timezone could not be found in the database' in %sbug67118.php:%d -Stack trace: -#0 %sbug67118.php(%d): DateTime->__construct('Funktionsansvar...', Object(DateTimeZone)) -#1 %sbug67118.php(%d): mydt->__construct('Funktionsansvar...', 'UTC') -#2 {main} - thrown in %sbug67118.php on line %d +Warning: DateTime::format(): The DateTime object has not been correctly initialized by its constructor in %sbug67118.php on line %d +Bad date diff --git a/ext/date/tests/bug67118_2.phpt b/ext/date/tests/bug67118_2.phpt new file mode 100644 index 000000000..b4904a158 --- /dev/null +++ b/ext/date/tests/bug67118_2.phpt @@ -0,0 +1,35 @@ +--TEST-- +Regression introduce in fix for Bug #67118 +--INI-- +date.timezone=Europe/Paris +--FILE-- +<?php +class Foo extends DateTime { + public function __construct($time = null) { + $tz = new DateTimeZone('UTC'); + try { + echo "First try\n"; + parent::__construct($time, $tz); + return; + } catch (Exception $e) { + echo "Second try\n"; + parent::__construct($time.'C', $tz); + } + } +} +$date = '12 Sep 2007 15:49:12 UT'; +var_dump(new Foo($date)); +?> +Done +--EXPECTF-- +First try +Second try +object(Foo)#1 (3) { + ["date"]=> + string(%d) "2007-09-12 15:49:%s" + ["timezone_type"]=> + int(3) + ["timezone"]=> + string(3) "UTC" +} +Done diff --git a/ext/dom/tests/DOMDocument_validate_external_dtd.phpt b/ext/dom/tests/DOMDocument_validate_external_dtd.phpt index 51a044c54..dd4ec960d 100644 --- a/ext/dom/tests/DOMDocument_validate_external_dtd.phpt +++ b/ext/dom/tests/DOMDocument_validate_external_dtd.phpt @@ -12,6 +12,7 @@ require_once dirname(__FILE__) .'/skipif.inc'; // reusing existing xml: http://cvs.php.net/viewvc.cgi/php-src/ext/dom/tests/dom.xml?view=co&content-type=text%2Fplain // reusing existing dtd: http://cvs.php.net/viewvc.cgi/php-src/ext/dom/tests/dom.ent?view=co&content-type=text%2Fplain $dom = new DOMDocument('1.0'); +$dom->substituteEntities = true; $dom->load(dirname(__FILE__).'/dom.xml'); var_dump($dom->validate()); ?> diff --git a/ext/dom/tests/bug67081.phpt b/ext/dom/tests/bug67081.phpt index 56c2c8e58..c6dc007d4 100644 --- a/ext/dom/tests/bug67081.phpt +++ b/ext/dom/tests/bug67081.phpt @@ -7,18 +7,22 @@ require_once('skipif.inc'); --FILE-- <?php $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_0.xml"); var_dump($domDocument->doctype->internalSubset); $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_1.xml"); var_dump($domDocument->doctype->internalSubset); $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "bug67081_2.xml"); var_dump($domDocument->doctype->internalSubset); $domDocument = new DOMDocument(); + $domDocument->substituteEntities = true; $domDocument->load(dirname(__FILE__) . DIRECTORY_SEPARATOR . "dom.xml"); var_dump($domDocument->doctype->internalSubset); ?> diff --git a/ext/exif/tests/exif004.phpt b/ext/exif/tests/exif004.phpt index 229f49e14..8797955f8 100644 --- a/ext/exif/tests/exif004.phpt +++ b/ext/exif/tests/exif004.phpt @@ -18,7 +18,7 @@ exif.encode_unicode=ISO-8859-1 test4.jpg is a 1*1 image that contains Exif tags written by WindowsXP */ $image = exif_read_data(dirname(__FILE__).'/test4.jpg','',true,false); -echo var_dump($image['WINXP']); +var_dump($image['WINXP']); ?> --EXPECT-- array(5) { diff --git a/ext/fileinfo/libmagic/cdf.c b/ext/fileinfo/libmagic/cdf.c index cbe3b0cf7..ad285cfe1 100644 --- a/ext/fileinfo/libmagic/cdf.c +++ b/ext/fileinfo/libmagic/cdf.c @@ -277,13 +277,15 @@ cdf_check_stream_offset(const cdf_stream_t *sst, const cdf_header_t *h, { const char *b = (const char *)sst->sst_tab; const char *e = ((const char *)p) + tail; + size_t ss = sst->sst_dirlen < h->h_min_size_standard_stream ? + CDF_SHORT_SEC_SIZE(h) : CDF_SEC_SIZE(h); (void)&line; - if (e >= b && (size_t)(e - b) <= CDF_SEC_SIZE(h) * sst->sst_len) + if (e >= b && (size_t)(e - b) <= ss * sst->sst_len) return 0; DPRINTF(("%d: offset begin %p < end %p || %" SIZE_T_FORMAT "u" " > %" SIZE_T_FORMAT "u [%" SIZE_T_FORMAT "u %" SIZE_T_FORMAT "u]\n", line, b, e, (size_t)(e - b), - CDF_SEC_SIZE(h) * sst->sst_len, CDF_SEC_SIZE(h), sst->sst_len)); + ss * sst->sst_len, ss, sst->sst_len)); errno = EFTYPE; return -1; } @@ -468,7 +470,8 @@ size_t cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size) { size_t i, j; - cdf_secid_t maxsector = (cdf_secid_t)(sat->sat_len * size); + cdf_secid_t maxsector = (cdf_secid_t)((sat->sat_len * size) + / sizeof(maxsector)); DPRINTF(("Chain:")); for (j = i = 0; sid >= 0; i++, j++) { @@ -478,8 +481,8 @@ cdf_count_chain(const cdf_sat_t *sat, cdf_secid_t sid, size_t size) errno = EFTYPE; return (size_t)-1; } - if (sid > maxsector) { - DPRINTF(("Sector %d > %d\n", sid, maxsector)); + if (sid >= maxsector) { + DPRINTF(("Sector %d >= %d\n", sid, maxsector)); errno = EFTYPE; return (size_t)-1; } @@ -812,7 +815,11 @@ cdf_read_property_info(const cdf_stream_t *sst, const cdf_header_t *h, if (cdf_check_stream_offset(sst, h, e, 0, __LINE__) == -1) goto out; for (i = 0; i < sh.sh_properties; i++) { - size_t ofs = CDF_GETUINT32(p, (i << 1) + 1); + size_t ofs, tail = (i << 1) + 1; + if (cdf_check_stream_offset(sst, h, p, tail * sizeof(uint32_t), + __LINE__) == -1) + goto out; + ofs = CDF_GETUINT32(p, tail); q = (const uint8_t *)(const void *) ((const char *)(const void *)p + ofs - 2 * sizeof(uint32_t)); diff --git a/ext/fileinfo/libmagic/softmagic.c b/ext/fileinfo/libmagic/softmagic.c index 1d5db8966..3dd07820a 100644 --- a/ext/fileinfo/libmagic/softmagic.c +++ b/ext/fileinfo/libmagic/softmagic.c @@ -915,10 +915,18 @@ mconvert(struct magic_set *ms, struct magic *m, int flip) return 1; } case FILE_PSTRING: { - char *ptr1 = p->s, *ptr2 = ptr1 + file_pstring_length_size(m); + size_t sz = file_pstring_length_size(m); + char *ptr1 = p->s, *ptr2 = ptr1 + sz; size_t len = file_pstring_get_length(m, ptr1); - if (len >= sizeof(p->s)) - len = sizeof(p->s) - 1; + if (len >= sizeof(p->s)) { + /* + * The size of the pascal string length (sz) + * is 1, 2, or 4. We need at least 1 byte for NUL + * termination, but we've already truncated the + * string by p->s, so we need to deduct sz. + */ + len = sizeof(p->s) - sz; + } while (len--) *ptr1++ = *ptr2++; *ptr1 = '\0'; diff --git a/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt b/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt index c9c45940b..958192704 100644 --- a/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt +++ b/ext/libxml/tests/libxml_set_external_entity_loader_variation1.phpt @@ -37,6 +37,7 @@ libxml_set_external_entity_loader( ); $dd = new DOMDocument; +$dd->substituteEntities = true; $dd->resolveExternals = true; $r = $dd->loadXML($xml); var_dump($dd->validate()); diff --git a/ext/mbstring/libmbfl/cvsclean b/ext/mbstring/libmbfl/cvsclean deleted file mode 100755 index 60ae246a5..000000000 --- a/ext/mbstring/libmbfl/cvsclean +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -function cvsclean_sub() { - prev_pwd=`pwd` - cd $1 - cat .cvsignore | while read fname; do - rm -r -f $fname - done - cd "$prev_pwd" -} - -cvsclean_sub . -cvsclean_sub mbfl -cvsclean_sub filters -cvsclean_sub nls diff --git a/ext/mysqli/tests/bug33491.phpt b/ext/mysqli/tests/bug33491.phpt index 168ecb038..7e994bc4d 100644 --- a/ext/mysqli/tests/bug33491.phpt +++ b/ext/mysqli/tests/bug33491.phpt @@ -26,4 +26,4 @@ $DB->query_single('SELECT DATE()'); ?> --EXPECTF-- -Fatal error: Call to a member function fetch_row() on a non-object in %sbug33491.php on line %d +Fatal error: Call to a member function fetch_row() on boolean in %sbug33491.php on line %d diff --git a/ext/mysqli/tests/mysqli_change_user_new.phpt b/ext/mysqli/tests/mysqli_change_user_new.phpt index a87afa84a..e16895766 100644 --- a/ext/mysqli/tests/mysqli_change_user_new.phpt +++ b/ext/mysqli/tests/mysqli_change_user_new.phpt @@ -41,4 +41,4 @@ Warning: mysqli_query(): MySQL server has gone away in %s on line %d Warning: mysqli_query(): Error reading result set's header in %s on line %d [003] [2006] MySQL server has gone away -Fatal error: Call to a member function fetch_assoc() on a non-object in %s on line %d
\ No newline at end of file +Fatal error: Call to a member function fetch_assoc() on %s in %s on line %d
\ No newline at end of file diff --git a/ext/mysqli/tests/table.inc b/ext/mysqli/tests/table.inc index aa1207af4..cb089bb95 100644 --- a/ext/mysqli/tests/table.inc +++ b/ext/mysqli/tests/table.inc @@ -12,7 +12,7 @@ if (!mysqli_query($link, 'DROP TABLE IF EXISTS test')) { exit(1); } -if (!mysqli_query($link, 'CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine)) { +if (!mysqli_query($link, 'CREATE TABLE test(id INT DEFAULT 0, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine)) { printf("Failed to create test table: [%d] %s\n", mysqli_errno($link), mysqli_error($link)); exit(1); } diff --git a/ext/mysqlnd/mysqlnd_charset.c b/ext/mysqlnd/mysqlnd_charset.c index c2f2b8890..dfa90db25 100644 --- a/ext/mysqlnd/mysqlnd_charset.c +++ b/ext/mysqlnd/mysqlnd_charset.c @@ -418,20 +418,60 @@ static uint mysqlnd_mbcharlen_utf16(unsigned int utf16) /* {{{ utf32 functions */ -static uint -check_mb_utf32(const char *start __attribute((unused)), const char *end __attribute((unused))) +static unsigned int check_mb_utf32(const char *start __attribute((unused)), const char *end __attribute((unused))) { return 4; } -static uint -mysqlnd_mbcharlen_utf32(unsigned int utf32 __attribute((unused))) +static unsigned int mysqlnd_mbcharlen_utf32(unsigned int utf32 __attribute((unused))) { return 4; } /* }}} */ + +/* {{{ gb18030 functions */ +#define is_gb18030_odd(c) (0x81 <= (zend_uchar) (c) && (zend_uchar) (c) <= 0xFE) +#define is_gb18030_even_2(c) ((0x40 <= (zend_uchar) (c) && (zend_uchar) (c) <= 0x7E) || (0x80 <= (zend_uchar) (c) && (zend_uchar) (c) <= 0xFE)) +#define is_gb18030_even_4(c) (0x30 <= (zend_uchar) (c) && (zend_uchar) (c) <= 0x39) + + +static unsigned int mysqlnd_mbcharlen_gb18030(unsigned int c) +{ + if (c <= 0xFF) { + return !is_gb18030_odd(c); + } + if (c > 0xFFFF || !is_gb18030_odd((c >> 8) & 0xFF)) { + return 0; + } + if (is_gb18030_even_2((c & 0xFF))) { + return 2; + } + if (is_gb18030_even_4((c & 0xFF))) { + return 4; + } + + return 0; +} + + +static unsigned int my_ismbchar_gb18030(const char * start, const char * end) +{ + if (end - start <= 1 || !is_gb18030_odd(start[0])) { + return 0; + } + + if (is_gb18030_even_2(start[1])) { + return 2; + } else if (end - start > 3 && is_gb18030_even_4(start[1]) && is_gb18030_odd(start[2]) && is_gb18030_even_4(start[3])) { + return 4; + } + + return 0; +} +/* }}} */ + /* The server compiles sometimes the full utf-8 (the mb4) as utf8m4, and the old as utf8, for BC reasons. Sometimes, utf8mb4 is just utf8 but the old charsets are utf8mb3. @@ -643,6 +683,8 @@ const MYSQLND_CHARSET mysqlnd_charsets[] = { 245, UTF8_MB4, UTF8_MB4"_croatian_ci", 1, 4, "", mysqlnd_mbcharlen_utf8, check_mb_utf8_valid}, { 246, UTF8_MB4, UTF8_MB4"_unicode_520_ci", 1, 4, "", mysqlnd_mbcharlen_utf8, check_mb_utf8_valid}, { 247, UTF8_MB4, UTF8_MB4"_vietnamese_ci", 1, 4, "", mysqlnd_mbcharlen_utf8, check_mb_utf8_valid}, + { 248, "gb18030", "gb18030_chinese_ci", 1, 4, "", mysqlnd_mbcharlen_gb18030, my_ismbchar_gb18030}, + { 249, "gb18030", "gb18030_bin", 1, 4, "", mysqlnd_mbcharlen_gb18030, my_ismbchar_gb18030}, { 254, UTF8_MB3, UTF8_MB3"_general_cs", 1, 3, "", mysqlnd_mbcharlen_utf8, check_mb_utf8_valid}, { 0, NULL, NULL, 0, 0, NULL, NULL, NULL} diff --git a/ext/oci8/LICENSE b/ext/oci8/LICENSE index 42536af32..6059c80e1 100644 --- a/ext/oci8/LICENSE +++ b/ext/oci8/LICENSE @@ -1,6 +1,6 @@ -------------------------------------------------------------------- The PHP License, version 3.01 -Copyright (c) 1999 - 2012 The PHP Group. All rights reserved. +Copyright (c) 1999 - 2014 The PHP Group. All rights reserved. -------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index 8badbf7e0..0d9b9564d 100755 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -708,7 +708,7 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ char * thestr; long gmadjust = 0; - if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME) { + if (ASN1_STRING_type(timestr) != V_ASN1_UTCTIME && ASN1_STRING_type(timestr) != V_ASN1_GENERALIZEDTIME) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "illegal ASN1 data type for timestamp"); return (time_t)-1; } @@ -723,6 +723,11 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ return (time_t)-1; } + if (ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME && ASN1_STRING_length(timestr) < 15) { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "unable to parse time string %s correctly", timestr->data); + return (time_t)-1; + } + strbuf = estrdup((char *)ASN1_STRING_data(timestr)); memset(&thetime, 0, sizeof(thetime)); @@ -744,14 +749,21 @@ static time_t asn1_time_to_time_t(ASN1_UTCTIME * timestr TSRMLS_DC) /* {{{ */ *thestr = '\0'; thestr -= 2; thetime.tm_mon = atoi(thestr)-1; + *thestr = '\0'; - thestr -= 2; - thetime.tm_year = atoi(thestr); + if( ASN1_STRING_type(timestr) == V_ASN1_UTCTIME ) { + thestr -= 2; + thetime.tm_year = atoi(thestr); - if (thetime.tm_year < 68) { - thetime.tm_year += 100; + if (thetime.tm_year < 68) { + thetime.tm_year += 100; + } + } else if( ASN1_STRING_type(timestr) == V_ASN1_GENERALIZEDTIME ) { + thestr -= 4; + thetime.tm_year = atoi(thestr) - 1900; } + thetime.tm_isdst = -1; ret = mktime(&thetime); diff --git a/ext/openssl/tests/bug65698.crt b/ext/openssl/tests/bug65698.crt new file mode 100644 index 000000000..c4a026113 --- /dev/null +++ b/ext/openssl/tests/bug65698.crt @@ -0,0 +1,28 @@ +-----BEGIN CERTIFICATE----- +MIIEsTCCA5mgAwIBAgIQdwrGwrpRpBwdXS+ZsmsMGjANBgkqhkiG9w0BAQUFADA+ +MQswCQYDVQQGEwJQTDEbMBkGA1UEChMSVW5pemV0byBTcC4geiBvLm8uMRIwEAYD +VQQDEwlDZXJ0dW0gQ0EwIhgPMjAwOTAzMDMxMjUzMThaGA8yMDI0MDMwMzEyNTMx +OFowdzELMAkGA1UEBhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVz +IFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEb +MBkGA1UEAxMSQ2VydHVtIExldmVsIElJIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA4LE0Ixw8h5Lper9tHVtZkWIujxYsPVgUZABeZZgQsKTdJjaG +VP64B/oiEV5Hd3AxRqaZ7dRRsf4Pg/PSS/2mHRQQ/SH3XACbrDHmucDvYgtU/WoZ +yp9d6PXVPY4j7J5t/52s+EbZD5swSuQLGjZ9iwg9sXX3JdJ9Ty+B3z80oiajpK0B +wqAxrcX3DekEOknj7LkAOK6iuQKI85REj4IVb9kD7KKIWdISGbfL4Ezh/TP51e0L +/WhTJ7lHbHbRzFfPU/oi3Qyt5tEexrPKe+6N+Jrejdb5Ya7Ne3tKujDU7KlbO+dn +pzFH7VHkBPJcQJ7QUrprPaqVsVg3JJ1PXTqVnwIDAQABo4IBbDCCAWgwDwYDVR0T +AQH/BAUwAwEB/zAdBgNVHQ4EFgQUgGIR3sBrpxDhCPBVtDCDv/qPCGAwUgYDVR0j +BEswSaFCpEAwPjELMAkGA1UEBhMCUEwxGzAZBgNVBAoTElVuaXpldG8gU3AuIHog +by5vLjESMBAGA1UEAxMJQ2VydHVtIENBggMBACAwDgYDVR0PAQH/BAQDAgEGMCwG +A1UdHwQlMCMwIaAfoB2GG2h0dHA6Ly9jcmwuY2VydHVtLnBsL2NhLmNybDBoBggr +BgEFBQcBAQRcMFowKAYIKwYBBQUHMAGGHGh0dHA6Ly9zdWJjYS5vY3NwLWNlcnR1 +bS5jb20wLgYIKwYBBQUHMAKGImh0dHA6Ly9yZXBvc2l0b3J5LmNlcnR1bS5wbC9j +YS5jZXIwOgYDVR0gBDMwMTAvBgRVHSAAMCcwJQYIKwYBBQUHAgEWGWh0dHBzOi8v +d3d3LmNlcnR1bS5wbC9DUFMwDQYJKoZIhvcNAQEFBQADggEBAI/jSDAW/w9qLzF6 +4oQiIRB7dGKp2Nlj27xZFYDBRINn4DKyZExkpanASF2of9eEzvrS+qoDY29mhXCi +MkiGr0vCsVhn0ReUpjg4Z5SsiQhZ2BGSjXiOJgaDI7Dw1MH7Ru6jdfSbLyd97EFj +ER0ERGdrcA2kLw7KfQm78IkClXEEKjKnAUTn1d/5Y4UuBWDCEL0FLgO9AqNXEzIy +rlXVGIs73kdefAK+Z1T6dm83vUrDMyzemWNRBI2tVBujkN6zkaF6uPjE4hfoIkEQ +Z4317byFkG4mxjATU+tQLG1Bs88HUAOrxtJOo/WoeCNsFJaxbYPt4oQGxIVYdz29 +OUX9CQA= +-----END CERTIFICATE----- diff --git a/ext/openssl/tests/bug65698.phpt b/ext/openssl/tests/bug65698.phpt new file mode 100644 index 000000000..35d31764d --- /dev/null +++ b/ext/openssl/tests/bug65698.phpt @@ -0,0 +1,19 @@ +--TEST-- +Bug #65689 (GeneralizedTime format parsing) +--SKIPIF-- +<?php +if (!extension_loaded("openssl")) die("skip"); +?> +--FILE-- +<?php +$crt = substr(__FILE__, 0, -4).'.crt'; +$info = openssl_x509_parse("file://$crt"); +var_dump($info["validFrom"], $info["validFrom_time_t"], $info["validTo"], $info["validTo_time_t"]); +?> +Done +--EXPECTF-- +string(15) "20090303125318Z" +int(1236084798) +string(15) "20240303125318Z" +int(1709470398) +Done diff --git a/ext/openssl/tests/cve-2013-6420.phpt b/ext/openssl/tests/cve-2013-6420.phpt index 87c0210b2..ccead0aab 100644 --- a/ext/openssl/tests/cve-2013-6420.phpt +++ b/ext/openssl/tests/cve-2013-6420.phpt @@ -12,7 +12,7 @@ var_dump($info['issuer']['emailAddress'], $info["validFrom_time_t"]); ?> Done --EXPECTF-- -%s openssl_x509_parse(): illegal ASN1 data type for timestamp in %s%ecve-2013-6420.php on line 3 +%s openssl_x509_parse(): illegal length in timestamp in %s%ecve-2013-6420.php on line 3 string(27) "stefan.esser@sektioneins.de" int(-1) Done diff --git a/ext/openssl/tests/openssl_spki_verify.phpt b/ext/openssl/tests/openssl_spki_verify.phpt index 1ee573fd3..52dc8e204 100644 --- a/ext/openssl/tests/openssl_spki_verify.phpt +++ b/ext/openssl/tests/openssl_spki_verify.phpt @@ -17,9 +17,7 @@ $ksize = array('1024'=>1024, '4096'=>4096); /* array of available hashings to test */ -$algo = array('md4'=>OPENSSL_ALGO_MD4, - 'md5'=>OPENSSL_ALGO_MD5, - 'sha1'=>OPENSSL_ALGO_SHA1, +$algo = array('sha1'=>OPENSSL_ALGO_SHA1, 'sha224'=>OPENSSL_ALGO_SHA224, 'sha256'=>OPENSSL_ALGO_SHA256, 'sha384'=>OPENSSL_ALGO_SHA384, @@ -90,16 +88,4 @@ bool(false) bool(true) bool(false) bool(true) -bool(false) -bool(true) -bool(false) -bool(true) -bool(false) -bool(true) -bool(false) -bool(true) -bool(false) -bool(true) -bool(false) -bool(true) bool(false)
\ No newline at end of file diff --git a/ext/pdo/pdo_sql_parser.re b/ext/pdo/pdo_sql_parser.re index fa8ef187f..9f6a6a736 100644 --- a/ext/pdo/pdo_sql_parser.re +++ b/ext/pdo/pdo_sql_parser.re @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt index 42c3d074a..224684b87 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt @@ -93,4 +93,4 @@ array(1) { Warning: PDO::prepare(): SQLSTATE[42S22]: Column not found: 1054 Unknown column 'unknown_column' in 'field list' in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d
\ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt index 90cedef56..b7b0ab629 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt @@ -36,4 +36,4 @@ Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number: mixed named Warning: PDO::prepare(): SQLSTATE[HY093]: Invalid parameter number in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d
\ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt index 4d59e8c3b..c16ce5dd1 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt @@ -56,4 +56,4 @@ Testing native PS... Warning: PDO::prepare(): SQLSTATE[42S02]: Base table or view not found: 1146 Table '%s.ihopeitdoesnotexist' doesn't exist in %s on line %d -Fatal error: Call to a member function execute() on a non-object in %s on line %d
\ No newline at end of file +Fatal error: Call to a member function execute() on boolean in %s on line %d diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt index 91b5237ea..56c37c5f1 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt @@ -99,4 +99,4 @@ Native Prepared Statements... Warning: PDO::query(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%SSELECT label FROM test ORDER BY id ASC LIMIT 1' at line %d in %s on line %d -Fatal error: Call to a member function errorInfo() on a non-object in %s on line %d +Fatal error: Call to a member function errorInfo() on boolean in %s on line %d diff --git a/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt b/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt index eeaf8d382..368464e13 100644 --- a/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isClosure_basic.phpt @@ -13,6 +13,6 @@ if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION <?php $closure = function($param) { return "this is a closure"; }; $rc = new ReflectionFunction($closure); -echo var_dump($rc->isClosure()); +var_dump($rc->isClosure()); --EXPECTF-- bool(true) diff --git a/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt b/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt index 31d37a85f..4148fada0 100644 --- a/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isDeprecated_basic.phpt @@ -10,6 +10,6 @@ if (!extension_loaded('reflection') || !defined('PHP_VERSION_ID') || PHP_VERSION --FILE-- <?php $rc = new ReflectionFunction('ereg'); -echo var_dump($rc->isDeprecated()); +var_dump($rc->isDeprecated()); --EXPECTF-- bool(true) diff --git a/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt b/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt index c71b96b8e..30189cf4d 100644 --- a/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt +++ b/ext/reflection/tests/ReflectionFunction_isDisabled_basic.phpt @@ -12,6 +12,6 @@ disable_functions=is_file --FILE-- <?php $rc = new ReflectionFunction('is_file'); -echo var_dump($rc->isDisabled()); +var_dump($rc->isDisabled()); --EXPECTF-- bool(true) diff --git a/ext/soap/soap.c b/ext/soap/soap.c index a8c6cb936..32bf5ca6f 100644 --- a/ext/soap/soap.c +++ b/ext/soap/soap.c @@ -225,6 +225,7 @@ PHP_METHOD(SoapClient, __getFunctions); PHP_METHOD(SoapClient, __getTypes); PHP_METHOD(SoapClient, __doRequest); PHP_METHOD(SoapClient, __setCookie); +PHP_METHOD(SoapClient, __getCookies); PHP_METHOD(SoapClient, __setLocation); PHP_METHOD(SoapClient, __setSoapHeaders); @@ -368,6 +369,9 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_soapclient___setcookie, 0, 0, 1) ZEND_ARG_INFO(0, value) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_soapclient___getcookies, 0) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_soapclient___setsoapheaders, 0, 0, 1) ZEND_ARG_INFO(0, soapheaders) ZEND_END_ARG_INFO() @@ -422,6 +426,7 @@ static const zend_function_entry soap_client_functions[] = { PHP_ME(SoapClient, __getTypes, arginfo_soapclient___gettypes, 0) PHP_ME(SoapClient, __doRequest, arginfo_soapclient___dorequest, 0) PHP_ME(SoapClient, __setCookie, arginfo_soapclient___setcookie, 0) + PHP_ME(SoapClient, __getCookies, arginfo_soapclient___getcookies, 0) PHP_ME(SoapClient, __setLocation, arginfo_soapclient___setlocation, 0) PHP_ME(SoapClient, __setSoapHeaders, arginfo_soapclient___setsoapheaders, 0) PHP_FE_END @@ -3150,6 +3155,24 @@ PHP_METHOD(SoapClient, __setCookie) } /* }}} */ +/* {{{ proto array SoapClient::__getCookies ( void ) + Returns list of cookies */ +PHP_METHOD(SoapClient, __getCookies) +{ + zval **cookies, *tmp; + + if (zend_parse_parameters_none() == FAILURE) { + return; + } + + array_init(return_value); + + if (zend_hash_find(Z_OBJPROP_P(this_ptr), "_cookies", sizeof("_cookies"), (void **)&cookies) != FAILURE) { + zend_hash_copy(Z_ARRVAL_P(return_value), Z_ARRVAL_P(*cookies), (copy_ctor_func_t) zval_add_ref, (void *)&tmp, sizeof(zval*)); + } +} +/* }}} */ + /* {{{ proto void SoapClient::__setSoapHeaders(array SoapHeaders) Sets SOAP headers for subsequent calls (replaces any previous values). diff --git a/ext/soap/tests/bug49898.phpt b/ext/soap/tests/bug49898.phpt new file mode 100644 index 000000000..eea4ea490 --- /dev/null +++ b/ext/soap/tests/bug49898.phpt @@ -0,0 +1,14 @@ +--TEST-- +Test for bug #49898: SoapClient::__getCookies() implementation +--CREDITS-- +Boro Sitnikovski <buritomath@yahoo.com> +--SKIPIF-- +<?php require_once('skipif.inc'); ?> +--FILE-- +<?php +$client = new SoapClient(null, array('uri' => 'mo:http://www.w3.org/', 'location' => 'http://some.url')); +$client->__setCookie("CookieTest", "HelloWorld"); +var_dump($client->__getCookies()['CookieTest'][0]); +?> +--EXPECT-- +string(10) "HelloWorld" diff --git a/ext/sockets/sendrecvmsg.c b/ext/sockets/sendrecvmsg.c index d9a819073..1d9cc78e7 100644 --- a/ext/sockets/sendrecvmsg.c +++ b/ext/sockets/sendrecvmsg.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2012 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/sockets/windows_common.h b/ext/sockets/windows_common.h index 3a9cb5912..9cc01ae12 100644 --- a/ext/sockets/windows_common.h +++ b/ext/sockets/windows_common.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2012 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/spl/spl_array.c b/ext/spl/spl_array.c index f450e0b71..4191b0db0 100644 --- a/ext/spl/spl_array.c +++ b/ext/spl/spl_array.c @@ -402,7 +402,7 @@ static zval *spl_array_read_dimension_ex(int check_inherited, zval *object, zval /* When in a write context, * ZE has to be fooled into thinking this is in a reference set * by separating (if necessary) and returning as an is_ref=1 zval (even if refcount == 1) */ - if ((type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET) && !Z_ISREF_PP(ret)) { + if ((type == BP_VAR_W || type == BP_VAR_RW || type == BP_VAR_UNSET) && !Z_ISREF_PP(ret) && ret != &EG(uninitialized_zval_ptr)) { if (Z_REFCOUNT_PP(ret) > 1) { zval *newval; @@ -1749,7 +1749,6 @@ SPL_METHOD(Array, unserialize) } if (buf_len == 0) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Empty serialized string cannot be empty"); return; } diff --git a/ext/spl/spl_dllist.c b/ext/spl/spl_dllist.c index 772d780e0..fb88f5890 100644 --- a/ext/spl/spl_dllist.c +++ b/ext/spl/spl_dllist.c @@ -1192,7 +1192,6 @@ SPL_METHOD(SplDoublyLinkedList, unserialize) } if (buf_len == 0) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Serialized string cannot be empty"); return; } diff --git a/ext/spl/spl_observer.c b/ext/spl/spl_observer.c index 91830ab00..57ddf492d 100644 --- a/ext/spl/spl_observer.c +++ b/ext/spl/spl_observer.c @@ -831,7 +831,6 @@ SPL_METHOD(SplObjectStorage, unserialize) } if (buf_len == 0) { - zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Empty serialized string cannot be empty"); return; } diff --git a/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt b/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt index 75d8a4132..4c446c82b 100644 --- a/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt +++ b/ext/spl/tests/ArrayObject_unserialize_empty_string.phpt @@ -1,5 +1,5 @@ --TEST-- -ArrayObject: test that you cannot unserialize a empty string +ArrayObject: test that you can unserialize a empty string --CREDITS-- Havard Eide <nucleuz@gmail.com> #PHPTestFest2009 Norway 2009-06-09 \o/ @@ -8,9 +8,6 @@ Havard Eide <nucleuz@gmail.com> $a = new ArrayObject(array()); $a->unserialize(""); ?> +Done --EXPECTF-- -Fatal error: Uncaught exception 'UnexpectedValueException' with message 'Empty serialized string cannot be empty' in %s.php:%d -Stack trace: -#0 %s(%d): ArrayObject->unserialize('') -#1 {main} - thrown in %s.php on line %d +Done diff --git a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt index 4c2dd75e1..617f85e63 100644 --- a/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt +++ b/ext/spl/tests/SplObjectStorage_unserialize_invalid_parameter3.phpt @@ -1,5 +1,5 @@ --TEST-- -Check that SplObjectStorage::unserialize throws exception when NULL passed +Check that SplObjectStorage::unserialize doesn't throws exception when NULL passed --CREDITS-- PHPNW Testfest 2009 - Simon Westcott (swestcott@gmail.com) --FILE-- @@ -14,6 +14,6 @@ try { } ?> +Done --EXPECTF-- -Empty serialized string cannot be empty - +Done diff --git a/ext/spl/tests/bug66127.phpt b/ext/spl/tests/bug66127.phpt new file mode 100644 index 000000000..b5d1dcac4 --- /dev/null +++ b/ext/spl/tests/bug66127.phpt @@ -0,0 +1,25 @@ +--TEST-- +Bug #66127 (Segmentation fault with ArrayObject unset) +--INI-- +error_reporting = E_ALL & ~E_NOTICE +--FILE-- +<?php +function crash() +{ + set_error_handler(function () {}); + $var = 1; + trigger_error('error'); + $var2 = $var; + $var3 = $var; + trigger_error('error'); +} + +$items = new ArrayObject(); + +unset($items[0]); +unset($items[0][0]); +crash(); +echo "Worked!\n"; +?> +--EXPECT-- +Worked! diff --git a/ext/spl/tests/iterator_035.phpt b/ext/spl/tests/iterator_035.phpt index 9ce098b69..fc0271e38 100644 --- a/ext/spl/tests/iterator_035.phpt +++ b/ext/spl/tests/iterator_035.phpt @@ -12,4 +12,6 @@ $a[] = &$tmp; echo "Done\n"; ?> --EXPECTF-- +Notice: Indirect modification of overloaded element of ArrayIterator has no effect in %s on line %d + Fatal error: Cannot assign by reference to overloaded object in %s on line %d diff --git a/ext/spl/tests/unserialize.phpt b/ext/spl/tests/unserialize.phpt new file mode 100644 index 000000000..3232b7967 --- /dev/null +++ b/ext/spl/tests/unserialize.phpt @@ -0,0 +1,43 @@ +--TEST-- +SPL: unserialize with no data (for PHPUnit) +--FILE-- +<?php + +$types = array('SplDoublyLinkedList', 'SplObjectStorage', 'ArrayObject'); + +foreach ($types as $type) { + // serialize an empty new object + $exp = serialize(new $type()); + // hack to instanciate an object without constructor + $str = sprintf('C:%d:"%s":0:{}', strlen($type), $type); + $obj = unserialize($str); + var_dump($obj); + // serialize result + $out = serialize($obj); + // both should match + var_dump($exp === $out); +} +?> +===DONE=== +--EXPECTF-- +object(SplDoublyLinkedList)#%d (2) { + ["flags":"SplDoublyLinkedList":private]=> + int(0) + ["dllist":"SplDoublyLinkedList":private]=> + array(0) { + } +} +bool(true) +object(SplObjectStorage)#%d (1) { + ["storage":"SplObjectStorage":private]=> + array(0) { + } +} +bool(true) +object(ArrayObject)#%d (1) { + ["storage":"ArrayObject":private]=> + array(0) { + } +} +bool(true) +===DONE=== diff --git a/ext/standard/array.c b/ext/standard/array.c index 4f9833103..cbcaaf5b8 100644 --- a/ext/standard/array.c +++ b/ext/standard/array.c @@ -342,8 +342,7 @@ PHP_FUNCTION(count) RETVAL_LONG(Z_LVAL_P(retval)); zval_ptr_dtor(&retval); } - zval_dtor(mode_zv); - efree(mode_zv); + zval_ptr_dtor(&mode_zv); return; } #endif diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index e525ff2a8..69e20fdd9 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2648,7 +2648,6 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_unserialize, 0, 0, 1) ZEND_ARG_INFO(0, variable_representation) - ZEND_ARG_INFO(1, consumed) ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO_EX(arginfo_memory_get_usage, 0, 0, 0) @@ -4043,92 +4042,91 @@ PHP_FUNCTION(putenv) { char *setting; int setting_len; + char *p, **env; + putenv_entry pe; +#ifdef PHP_WIN32 + char *value = NULL; + int equals = 0; + int error_code; +#endif if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &setting, &setting_len) == FAILURE) { return; } + + if(setting_len == 0 || setting[0] == '=') { + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); + RETURN_FALSE; + } - if (setting_len) { - char *p, **env; - putenv_entry pe; + pe.putenv_string = estrndup(setting, setting_len); + pe.key = estrndup(setting, setting_len); + if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ + *p = '\0'; #ifdef PHP_WIN32 - char *value = NULL; - int equals = 0; - int error_code; + equals = 1; #endif + } - pe.putenv_string = estrndup(setting, setting_len); - pe.key = estrndup(setting, setting_len); - if ((p = strchr(pe.key, '='))) { /* nullify the '=' if there is one */ - *p = '\0'; -#ifdef PHP_WIN32 - equals = 1; -#endif - } - - pe.key_len = strlen(pe.key); + pe.key_len = strlen(pe.key); #ifdef PHP_WIN32 - if (equals) { - if (pe.key_len < setting_len - 1) { - value = p + 1; - } else { - /* empty string*/ - value = p; - } + if (equals) { + if (pe.key_len < setting_len - 1) { + value = p + 1; + } else { + /* empty string*/ + value = p; } + } #endif - zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); + zend_hash_del(&BG(putenv_ht), pe.key, pe.key_len+1); - /* find previous value */ - pe.previous_value = NULL; - for (env = environ; env != NULL && *env != NULL; env++) { - if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ + /* find previous value */ + pe.previous_value = NULL; + for (env = environ; env != NULL && *env != NULL; env++) { + if (!strncmp(*env, pe.key, pe.key_len) && (*env)[pe.key_len] == '=') { /* found it */ #if defined(PHP_WIN32) - /* must copy previous value because MSVCRT's putenv can free the string without notice */ - pe.previous_value = estrdup(*env); + /* must copy previous value because MSVCRT's putenv can free the string without notice */ + pe.previous_value = estrdup(*env); #else - pe.previous_value = *env; + pe.previous_value = *env; #endif - break; - } + break; } + } #if HAVE_UNSETENV - if (!p) { /* no '=' means we want to unset it */ - unsetenv(pe.putenv_string); - } - if (!p || putenv(pe.putenv_string) == 0) { /* success */ + if (!p) { /* no '=' means we want to unset it */ + unsetenv(pe.putenv_string); + } + if (!p || putenv(pe.putenv_string) == 0) { /* success */ #else # ifndef PHP_WIN32 - if (putenv(pe.putenv_string) == 0) { /* success */ + if (putenv(pe.putenv_string) == 0) { /* success */ # else - error_code = SetEnvironmentVariable(pe.key, value); + error_code = SetEnvironmentVariable(pe.key, value); # if _MSC_VER < 1500 - /* Yet another VC6 bug, unset may return env not found */ - if (error_code != 0 || - (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { + /* Yet another VC6 bug, unset may return env not found */ + if (error_code != 0 || + (error_code == 0 && GetLastError() == ERROR_ENVVAR_NOT_FOUND)) { # else - if (error_code != 0) { /* success */ + if (error_code != 0) { /* success */ # endif # endif #endif - zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); + zend_hash_add(&BG(putenv_ht), pe.key, pe.key_len + 1, (void **) &pe, sizeof(putenv_entry), NULL); #ifdef HAVE_TZSET - if (!strncmp(pe.key, "TZ", pe.key_len)) { - tzset(); - } -#endif - RETURN_TRUE; - } else { - efree(pe.putenv_string); - efree(pe.key); - RETURN_FALSE; + if (!strncmp(pe.key, "TZ", pe.key_len)) { + tzset(); } +#endif + RETURN_TRUE; + } else { + efree(pe.putenv_string); + efree(pe.key); + RETURN_FALSE; } - - php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid parameter syntax"); - RETURN_FALSE; } /* }}} */ #endif diff --git a/ext/standard/dns.c b/ext/standard/dns.c index 6a894467f..214a7dc7e 100644 --- a/ext/standard/dns.c +++ b/ext/standard/dns.c @@ -517,6 +517,10 @@ static u_char *php_parserr(u_char *cp, querybuf *answer, int type_to_fetch, int while (ll < dlen) { n = cp[ll]; + if ((ll + n) >= dlen) { + // Invalid chunk length, truncate + n = dlen - (ll + 1); + } memcpy(tp + ll , cp + ll + 1, n); add_next_index_stringl(entries, cp + ll + 1, n, 1); ll = ll + n + 1; diff --git a/ext/standard/http_fopen_wrapper.c b/ext/standard/http_fopen_wrapper.c index 73776ff0b..1b8d505a4 100644 --- a/ext/standard/http_fopen_wrapper.c +++ b/ext/standard/http_fopen_wrapper.c @@ -752,10 +752,11 @@ finish: SEPARATE_ZVAL(tmpzval); convert_to_long_ex(tmpzval); follow_location = Z_LVAL_PP(tmpzval); - } else if (!(response_code >= 300 && response_code < 304 || 307 == response_code)) { + } else if (!(response_code >= 300 && response_code < 304 || 307 == response_code || 308 == response_code)) { /* we shouldn't redirect automatically if follow_location isn't set and response_code not in (300, 301, 302, 303 and 307) - see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1 */ + see http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3.1 + RFC 7238 defines 308: http://tools.ietf.org/html/rfc7238 */ follow_location = 0; } strlcpy(location, http_header_line + 10, sizeof(location)); diff --git a/ext/standard/tests/general_functions/header_redirection_001.phpt b/ext/standard/tests/general_functions/header_redirection_001.phpt new file mode 100644 index 000000000..ecf57ec54 --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_001.phpt @@ -0,0 +1,11 @@ +--TEST-- +Location: headers change the status code +--CGI-- +--FILE-- +<?php +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 302 Moved Temporarily +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_002.phpt b/ext/standard/tests/general_functions/header_redirection_002.phpt new file mode 100644 index 000000000..2bf6dec51 --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_002.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers override non-201 and 3xx response codes +--CGI-- +--FILE-- +<?php +header("HTTP/1.1 418 I'm a Teapot"); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 302 Moved Temporarily +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_003.phpt b/ext/standard/tests/general_functions/header_redirection_003.phpt new file mode 100644 index 000000000..678e3143a --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_003.phpt @@ -0,0 +1,11 @@ +--TEST-- +Location: headers respect the header() response code parameter +--CGI-- +--FILE-- +<?php +header('Location: http://example.com/', true, 404); +?> +--EXPECTHEADERS-- +Status: 404 Not Found +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_004.phpt b/ext/standard/tests/general_functions/header_redirection_004.phpt new file mode 100644 index 000000000..678e3143a --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_004.phpt @@ -0,0 +1,11 @@ +--TEST-- +Location: headers respect the header() response code parameter +--CGI-- +--FILE-- +<?php +header('Location: http://example.com/', true, 404); +?> +--EXPECTHEADERS-- +Status: 404 Not Found +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_005.phpt b/ext/standard/tests/general_functions/header_redirection_005.phpt new file mode 100644 index 000000000..fc3e0f7af --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_005.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 201 response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 201 Created'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 201 Created +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_006.phpt b/ext/standard/tests/general_functions/header_redirection_006.phpt new file mode 100644 index 000000000..5fb52096c --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_006.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 300 Multiple Choices response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 300 Multiple Choices'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 300 Multiple Choices +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_007.phpt b/ext/standard/tests/general_functions/header_redirection_007.phpt new file mode 100644 index 000000000..6769b080f --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_007.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 301 Moved Permanently response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 301 Moved Permanently'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 301 Moved Permanently +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_008.phpt b/ext/standard/tests/general_functions/header_redirection_008.phpt new file mode 100644 index 000000000..50993707c --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_008.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 302 Found response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 302 Found'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 302 Found +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_009.phpt b/ext/standard/tests/general_functions/header_redirection_009.phpt new file mode 100644 index 000000000..f8d27f9bf --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_009.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 303 See Other response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 303 See Other'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 303 See Other +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_010.phpt b/ext/standard/tests/general_functions/header_redirection_010.phpt new file mode 100644 index 000000000..316112dde --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_010.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 304 Not Modified response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 304 Not Modified'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 304 Not Modified +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_011.phpt b/ext/standard/tests/general_functions/header_redirection_011.phpt new file mode 100644 index 000000000..bfd878963 --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_011.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 305 Use Proxy response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 305 Use Proxy'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 305 Use Proxy +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_012.phpt b/ext/standard/tests/general_functions/header_redirection_012.phpt new file mode 100644 index 000000000..657028b09 --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_012.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 307 Temporary Redirect response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 307 Temporary Redirect'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 307 Temporary Redirect +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_013.phpt b/ext/standard/tests/general_functions/header_redirection_013.phpt new file mode 100644 index 000000000..4dce0d00f --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_013.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 308 Permanent Redirect response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 308 Permanent Redirect'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 308 Permanent Redirect +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/header_redirection_014.phpt b/ext/standard/tests/general_functions/header_redirection_014.phpt new file mode 100644 index 000000000..a5fb6e8fe --- /dev/null +++ b/ext/standard/tests/general_functions/header_redirection_014.phpt @@ -0,0 +1,12 @@ +--TEST-- +Location: headers do not override the 399 Choose Your Own Adventure response code +--CGI-- +--FILE-- +<?php +header('HTTP/1.1 399 Choose Your Own Adventure'); +header('Location: http://example.com/'); +?> +--EXPECTHEADERS-- +Status: 399 Choose Your Own Adventure +Location: http://example.com/ +--EXPECT-- diff --git a/ext/standard/tests/general_functions/putenv.phpt b/ext/standard/tests/general_functions/putenv.phpt index afe1badce..254207320 100644 --- a/ext/standard/tests/general_functions/putenv.phpt +++ b/ext/standard/tests/general_functions/putenv.phpt @@ -15,6 +15,9 @@ var_dump(getenv($var_name)); var_dump(putenv($var_name)); var_dump(getenv($var_name)); +var_dump(putenv("=123")); +var_dump(putenv("")); + echo "Done\n"; ?> --EXPECTF-- @@ -25,4 +28,10 @@ bool(true) string(0) "" bool(true) bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) + +Warning: putenv(): Invalid parameter syntax in %s on line %d +bool(false) Done diff --git a/ext/standard/tests/http/bug67430.phpt b/ext/standard/tests/http/bug67430.phpt new file mode 100644 index 000000000..d4474fdf5 --- /dev/null +++ b/ext/standard/tests/http/bug67430.phpt @@ -0,0 +1,49 @@ +--TEST-- +Bug #67430 (http:// wrapper doesn't follow 308 redirects) +--INI-- +allow_url_fopen=1 +--SKIPIF-- +<?php require 'server.inc'; http_server_skipif('tcp://127.0.0.1:12342'); ?> +--FILE-- +<?php +require 'server.inc'; + +function do_test($follow) { + $options = [ + 'http' => [ + 'method' => 'POST', + 'follow_location' => $follow, + ], + ]; + + $ctx = stream_context_create($options); + + $responses = [ + "data://text/plain,HTTP/1.1 308\r\nLocation: /foo\r\n\r\n", + "data://text/plain,HTTP/1.1 200\r\nConnection: close\r\n\r\n", + ]; + $pid = http_server('tcp://127.0.0.1:12342', $responses, $output); + + $fd = fopen('http://127.0.0.1:12342/', 'rb', false, $ctx); + fseek($output, 0, SEEK_SET); + echo stream_get_contents($output); + + http_server_kill($pid); +} + +do_test(true); +do_test(false); + +?> +Done +--EXPECT-- +POST / HTTP/1.0 +Host: 127.0.0.1:12342 + +GET /foo HTTP/1.0 +Host: 127.0.0.1:12342 + +POST / HTTP/1.0 +Host: 127.0.0.1:12342 + +Done diff --git a/ext/standard/tests/serialize/serialization_error_001.phpt b/ext/standard/tests/serialize/serialization_error_001.phpt index c6c17512f..da6f50cc0 100644 --- a/ext/standard/tests/serialize/serialization_error_001.phpt +++ b/ext/standard/tests/serialize/serialization_error_001.phpt @@ -21,7 +21,7 @@ var_dump( unserialize() ); //Test serialize with one more than the expected number of arguments var_dump( serialize(1,2) ); -var_dump( unserialize(1,$x,2) ); +var_dump( unserialize(1,2) ); echo "Done"; ?> @@ -31,12 +31,12 @@ echo "Done"; Warning: serialize() expects exactly 1 parameter, 0 given in %s on line 16 NULL -Warning: unserialize() expects at least 1 parameter, 0 given in %s on line 17 +Warning: unserialize() expects exactly 1 parameter, 0 given in %s on line 17 bool(false) Warning: serialize() expects exactly 1 parameter, 2 given in %s on line 20 NULL -Warning: unserialize() expects at most 2 parameters, 3 given in %s on line 21 +Warning: unserialize() expects exactly 1 parameter, 2 given in %s on line 21 bool(false) Done diff --git a/ext/standard/tests/serialize/unserialize_consumed.phpt b/ext/standard/tests/serialize/unserialize_consumed.phpt deleted file mode 100644 index 6cc11e273..000000000 --- a/ext/standard/tests/serialize/unserialize_consumed.phpt +++ /dev/null @@ -1,27 +0,0 @@ ---TEST-- -Unserialization of partial strings ---FILE-- -<?php -$data = [123,4.56,true]; -$ser = serialize($data); -$serlen = strlen($ser); - -$unser = unserialize($ser, $consumed); -echo "Consume full string: "; -var_dump($serlen == $consumed); -echo "Return original data: "; -var_dump($unser === $data); - -$ser .= "junk\x01data"; -$unser = unserialize($ser, $consumed); -echo "Consume full string(junk): "; -var_dump($serlen == $consumed); -echo "Return original data(junk): "; -var_dump($unser === $data); - ---EXPECT-- -Consume full string: bool(true) -Return original data: bool(true) -Consume full string(junk): bool(true) -Return original data(junk): bool(true) - diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re index ecacb76f9..70ee06eee 100644 --- a/ext/standard/url_scanner_ex.re +++ b/ext/standard/url_scanner_ex.re @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/standard/var.c b/ext/standard/var.c index 930edd687..457f31db3 100644 --- a/ext/standard/var.c +++ b/ext/standard/var.c @@ -943,7 +943,7 @@ PHP_FUNCTION(serialize) } /* }}} */ -/* {{{ proto mixed unserialize(string variable_representation[, int &consumed]) +/* {{{ proto mixed unserialize(string variable_representation) Takes a string representation of variable and recreates it */ PHP_FUNCTION(unserialize) { @@ -951,9 +951,8 @@ PHP_FUNCTION(unserialize) int buf_len; const unsigned char *p; php_unserialize_data_t var_hash; - zval *consumed = NULL; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|z", &buf, &buf_len, &consumed) == FAILURE) { + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &buf, &buf_len) == FAILURE) { RETURN_FALSE; } @@ -972,11 +971,6 @@ PHP_FUNCTION(unserialize) RETURN_FALSE; } PHP_VAR_UNSERIALIZE_DESTROY(var_hash); - - if (consumed) { - zval_dtor(consumed); - ZVAL_LONG(consumed, ((char*)p) - buf); - } } /* }}} */ diff --git a/ext/standard/var_unserializer.c b/ext/standard/var_unserializer.c index eb1a90d1d..d7cc85367 100644 --- a/ext/standard/var_unserializer.c +++ b/ext/standard/var_unserializer.c @@ -3,7 +3,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/standard/var_unserializer.re b/ext/standard/var_unserializer.re index b3f5d29ca..3a1b91095 100644 --- a/ext/standard/var_unserializer.re +++ b/ext/standard/var_unserializer.re @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/ext/tokenizer/tests/bug67395.phpt b/ext/tokenizer/tests/bug67395.phpt new file mode 100644 index 000000000..c9b7f3012 --- /dev/null +++ b/ext/tokenizer/tests/bug67395.phpt @@ -0,0 +1,15 @@ +--TEST-- +Bug 67395: token_name() does not return name for T_POW and T_POW_EQUAL token +--FILE-- +<?php + +$powToken = token_get_all('<?php **')[1][0]; +var_dump(token_name($powToken)); + +$powEqualToken = token_get_all('<?php **=')[1][0]; +var_dump(token_name($powEqualToken)); + +?> +--EXPECT-- +string(5) "T_POW" +string(11) "T_POW_EQUAL" diff --git a/ext/tokenizer/tokenizer_data.c b/ext/tokenizer/tokenizer_data.c index dc48f040f..beb9ea8e5 100644 --- a/ext/tokenizer/tokenizer_data.c +++ b/ext/tokenizer/tokenizer_data.c @@ -39,6 +39,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_LOGICAL_AND", T_LOGICAL_AND, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_PRINT", T_PRINT, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_YIELD", T_YIELD, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW_EQUAL", T_POW_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SR_EQUAL", T_SR_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_SL_EQUAL", T_SL_EQUAL, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_XOR_EQUAL", T_XOR_EQUAL, CONST_CS | CONST_PERSISTENT); @@ -70,6 +71,7 @@ void tokenizer_register_constants(INIT_FUNC_ARGS) { REGISTER_LONG_CONSTANT("T_INT_CAST", T_INT_CAST, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_DEC", T_DEC, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_INC", T_INC, CONST_CS | CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("T_POW", T_POW, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_CLONE", T_CLONE, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_NEW", T_NEW, CONST_CS | CONST_PERSISTENT); REGISTER_LONG_CONSTANT("T_EXIT", T_EXIT, CONST_CS | CONST_PERSISTENT); @@ -176,6 +178,7 @@ char *get_token_type_name(int token_type) case T_LOGICAL_AND: return "T_LOGICAL_AND"; case T_PRINT: return "T_PRINT"; case T_YIELD: return "T_YIELD"; + case T_POW_EQUAL: return "T_POW_EQUAL"; case T_SR_EQUAL: return "T_SR_EQUAL"; case T_SL_EQUAL: return "T_SL_EQUAL"; case T_XOR_EQUAL: return "T_XOR_EQUAL"; @@ -207,6 +210,7 @@ char *get_token_type_name(int token_type) case T_INT_CAST: return "T_INT_CAST"; case T_DEC: return "T_DEC"; case T_INC: return "T_INC"; + case T_POW: return "T_POW"; case T_CLONE: return "T_CLONE"; case T_NEW: return "T_NEW"; case T_EXIT: return "T_EXIT"; diff --git a/ext/zlib/tests/gzseek_basic2.phpt b/ext/zlib/tests/gzseek_basic2.phpt index 82d305d0f..8e037af13 100644 --- a/ext/zlib/tests/gzseek_basic2.phpt +++ b/ext/zlib/tests/gzseek_basic2.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); diff --git a/ext/zlib/tests/gzseek_variation1.phpt b/ext/zlib/tests/gzseek_variation1.phpt index b260783f1..8512b743b 100644 --- a/ext/zlib/tests/gzseek_variation1.phpt +++ b/ext/zlib/tests/gzseek_variation1.phpt @@ -20,7 +20,7 @@ gzwrite($h, $str2); gzclose($h); $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); diff --git a/ext/zlib/tests/gzseek_variation4.phpt b/ext/zlib/tests/gzseek_variation4.phpt index 3d0cf67ce..529a01214 100644 --- a/ext/zlib/tests/gzseek_variation4.phpt +++ b/ext/zlib/tests/gzseek_variation4.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); diff --git a/ext/zlib/tests/gzseek_variation5.phpt b/ext/zlib/tests/gzseek_variation5.phpt index 93fb19fdb..11e491278 100644 --- a/ext/zlib/tests/gzseek_variation5.phpt +++ b/ext/zlib/tests/gzseek_variation5.phpt @@ -24,7 +24,7 @@ gzclose($h); echo "\nreading the output file\n"; $h = gzopen($f, 'r'); echo gzread($h, strlen($str1))."\n"; -echo var_dump(bin2hex(gzread($h, 20))); +var_dump(bin2hex(gzread($h, 20))); echo gzread($h, strlen($str2))."\n"; gzclose($h); unlink($f); @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/main/SAPI.c b/main/SAPI.c index 975dd618b..653f58717 100644 --- a/main/SAPI.c +++ b/main/SAPI.c @@ -825,7 +825,7 @@ SAPI_API int sapi_header_op(sapi_header_op_enum op, void *arg TSRMLS_DC) "0", sizeof("0") - 1, PHP_INI_USER, PHP_INI_STAGE_RUNTIME); } else if (!STRCASECMP(header_line, "Location")) { if ((SG(sapi_headers).http_response_code < 300 || - SG(sapi_headers).http_response_code > 307) && + SG(sapi_headers).http_response_code > 399) && SG(sapi_headers).http_response_code != 201) { /* Return a Found Redirect if one is not already specified */ if (http_response_code) { /* user specified redirect code */ diff --git a/main/php_config.h.in b/main/php_config.h.in index 5be595e63..69d255609 100644 --- a/main/php_config.h.in +++ b/main/php_config.h.in @@ -365,6 +365,9 @@ /* Whether you use GNU Pth */ #undef GNUPTH +/* Define to 1 if `TIOCGWINSZ' requires <sys/ioctl.h>. */ +#undef GWINSZ_IN_SYS_IOCTL + /* Whether 3 arg set_rebind_proc() */ #undef HAVE_3ARG_SETREBINDPROC diff --git a/main/php_version.h b/main/php_version.h index 9f5f55ec9..65600674c 100644 --- a/main/php_version.h +++ b/main/php_version.h @@ -3,6 +3,6 @@ #define PHP_MAJOR_VERSION 5 #define PHP_MINOR_VERSION 6 #define PHP_RELEASE_VERSION 0 -#define PHP_EXTRA_VERSION "beta4" -#define PHP_VERSION "5.6.0beta4" +#define PHP_EXTRA_VERSION "RC1" +#define PHP_VERSION "5.6.0RC1" #define PHP_VERSION_ID 50600 diff --git a/sapi/cli/php.1.in b/sapi/cli/php.1.in index 8672b3ba3..4d536df53 100644 --- a/sapi/cli/php.1.in +++ b/sapi/cli/php.1.in @@ -1,4 +1,4 @@ -.TH PHP 1 "2013" "The PHP Group" "Scripting Language" +.TH PHP 1 "2014" "The PHP Group" "Scripting Language" .SH NAME php \- PHP Command Line Interface 'CLI' .P @@ -454,7 +454,7 @@ contributors all around the world. .SH VERSION INFORMATION This manpage describes \fBphp\fP, version @PHP_VERSION@. .SH COPYRIGHT -Copyright \(co 1997\-2013 The PHP Group +Copyright \(co 1997\-2014 The PHP Group .LP This source file is subject to version 3.01 of the PHP license, that is bundled with this package in the file LICENSE, and is diff --git a/sapi/cli/php_cli_server.c b/sapi/cli/php_cli_server.c index 5c528a8d9..64cca0eb6 100644 --- a/sapi/cli/php_cli_server.c +++ b/sapi/cli/php_cli_server.c @@ -223,6 +223,7 @@ static php_cli_server_http_response_status_code_pair status_map[] = { { 304, "Not Modified" }, { 305, "Use Proxy" }, { 307, "Temporary Redirect" }, + { 308, "Permanent Redirect" }, { 400, "Bad Request" }, { 401, "Unauthorized" }, { 402, "Payment Required" }, @@ -241,6 +242,7 @@ static php_cli_server_http_response_status_code_pair status_map[] = { { 415, "Unsupported Media Type" }, { 416, "Requested Range Not Satisfiable" }, { 417, "Expectation Failed" }, + { 426, "Upgrade Required" }, { 428, "Precondition Required" }, { 429, "Too Many Requests" }, { 431, "Request Header Fields Too Large" }, @@ -894,13 +896,11 @@ static void php_cli_server_poller_remove(php_cli_server_poller *poller, int mode #endif } /* }}} */ -static int php_cli_server_poller_poll(php_cli_server_poller *poller, const struct timeval *tv) /* {{{ */ +static int php_cli_server_poller_poll(php_cli_server_poller *poller, struct timeval *tv) /* {{{ */ { - struct timeval t = *tv; - memmove(&poller->active.rfds, &poller->rfds, sizeof(poller->rfds)); memmove(&poller->active.wfds, &poller->wfds, sizeof(poller->wfds)); - return php_select(poller->max_fd + 1, &poller->active.rfds, &poller->active.wfds, NULL, &t); + return php_select(poller->max_fd + 1, &poller->active.rfds, &poller->active.wfds, NULL, tv); } /* }}} */ static int php_cli_server_poller_iter_on_active(php_cli_server_poller *poller, void *opaque, int(*callback)(void *, int fd, int events)) /* {{{ */ @@ -2477,7 +2477,7 @@ static int php_cli_server_do_event_loop(php_cli_server *server TSRMLS_DC) /* {{{ { int retval = SUCCESS; while (server->is_running) { - static const struct timeval tv = { 1, 0 }; + struct timeval tv = { 1, 0 }; int n = php_cli_server_poller_poll(&server->poller, &tv); if (n > 0) { php_cli_server_do_event_for_each_fd(server, diff --git a/sapi/cli/tests/bug67429.phpt b/sapi/cli/tests/bug67429.phpt new file mode 100644 index 000000000..856946b29 --- /dev/null +++ b/sapi/cli/tests/bug67429.phpt @@ -0,0 +1,49 @@ +--TEST-- +FR #67429 (CLI server is missing some new HTTP response codes) +--SKIPIF-- +<?php +include "skipif.inc"; +?> +--FILE-- +<?php +include "php_cli_server.inc"; + +foreach ([308, 426] as $code) { + php_cli_server_start(<<<PHP +http_response_code($code); +PHP + ); + + list($host, $port) = explode(':', PHP_CLI_SERVER_ADDRESS); + $port = intval($port)?:80; + + $fp = fsockopen($host, $port, $errno, $errstr, 0.5); + if (!$fp) { + die("connect failed"); + } + + if(fwrite($fp, <<<HEADER +GET / HTTP/1.1 + + +HEADER + )) { + while (!feof($fp)) { + echo fgets($fp); + } + } + + fclose($fp); +} +?> +--EXPECTF-- +HTTP/1.1 308 Permanent Redirect +Connection: close +X-Powered-By: %s +Content-type: text/html; charset=UTF-8 + +HTTP/1.1 426 Upgrade Required +Connection: close +X-Powered-By: %s +Content-type: text/html; charset=UTF-8 + diff --git a/sapi/phpdbg/.gitignore b/sapi/phpdbg/.gitignore new file mode 100644 index 000000000..51165dab2 --- /dev/null +++ b/sapi/phpdbg/.gitignore @@ -0,0 +1,6 @@ +.libs/ +phpdbg +*.lo +*.o +*.output +build diff --git a/sapi/phpdbg/.travis.yml b/sapi/phpdbg/.travis.yml index 353402858..d5b492e7c 100644 --- a/sapi/phpdbg/.travis.yml +++ b/sapi/phpdbg/.travis.yml @@ -1,3 +1,12 @@ language: c -script: ./travis/ci.sh +env: +- PHP="PHP-5.4" +- PHP="PHP-5.5" +- PHP="PHP-5.6" +- PHP="master" + +before_script: ./travis/ci.sh + +script: +- ./php-src/sapi/cli/php php-src/sapi/phpdbg/tests/run-tests.php -diff2stdout --phpdbg php-src/sapi/phpdbg/phpdbg diff --git a/sapi/phpdbg/Makefile.frag b/sapi/phpdbg/Makefile.frag index 45768de2e..d787b0fb1 100644 --- a/sapi/phpdbg/Makefile.frag +++ b/sapi/phpdbg/Makefile.frag @@ -8,14 +8,17 @@ $(BUILD_SHARED): $(PHP_GLOBAL_OBJS) $(PHP_BINARY_OBJS) $(PHP_PHPDBG_OBJS) $(BUILD_BINARY): $(PHP_GLOBAL_OBJS) $(PHP_BINARY_OBJS) $(PHP_PHPDBG_OBJS) $(BUILD_PHPDBG) -$(builddir)/sapi/phpdbg/phpdbg_lexer.lo: $(srcdir)/sapi/phpdbg/phpdbg_parser.h +%.c: %.y +%.c: %.l -$(srcdir)/sapi/phpdbg/phpdbg_lexer.c: $(srcdir)/sapi/phpdbg/phpdbg_lexer.l - @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) --no-generation-date -cbdFo sapi/phpdbg/phpdbg_lexer.c sapi/phpdbg/phpdbg_lexer.l) +$(builddir)/phpdbg_lexer.lo: $(srcdir)/phpdbg_parser.h -$(srcdir)/sapi/phpdbg/phpdbg_parser.h: $(srcdir)/sapi/phpdbg/phpdbg_parser.c -$(srcdir)/sapi/phpdbg/phpdbg_parser.c: $(srcdir)/sapi/phpdbg/phpdbg_parser.y - @$(YACC) -p phpdbg_ -v -d $(srcdir)/sapi/phpdbg/phpdbg_parser.y -o $@ +$(srcdir)/phpdbg_lexer.c: $(srcdir)/phpdbg_lexer.l + @(cd $(top_srcdir); $(RE2C) $(RE2C_FLAGS) --no-generation-date -cbdFo $(srcdir)/phpdbg_lexer.c $(srcdir)/phpdbg_lexer.l) + +$(srcdir)/phpdbg_parser.h: $(srcdir)/phpdbg_parser.c +$(srcdir)/phpdbg_parser.c: $(srcdir)/phpdbg_parser.y + @$(YACC) -p phpdbg_ -v -d $(srcdir)/phpdbg_parser.y -o $@ install-phpdbg: $(BUILD_BINARY) @echo "Installing phpdbg binary: $(INSTALL_ROOT)$(bindir)/" diff --git a/sapi/phpdbg/config.m4 b/sapi/phpdbg/config.m4 index a1b2f9faa..1a6640eac 100644 --- a/sapi/phpdbg/config.m4 +++ b/sapi/phpdbg/config.m4 @@ -9,6 +9,7 @@ PHP_ARG_ENABLE(phpdbg-debug, for phpdbg debug build, [ --enable-phpdbg-debug Build phpdbg in debug mode], no, no) if test "$PHP_PHPDBG" != "no"; then + AC_HEADER_TIOCGWINSZ AC_DEFINE(HAVE_PHPDBG, 1, [ ]) if test "$PHP_PHPDBG_DEBUG" != "no"; then @@ -28,7 +29,7 @@ if test "$PHP_PHPDBG" != "no"; then PHP_SUBST(PHP_PHPDBG_FILES) PHP_SUBST(PHPDBG_EXTRA_LIBS) - PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag]) + PHP_ADD_MAKEFILE_FRAGMENT([$abs_srcdir/sapi/phpdbg/Makefile.frag], [$abs_srcdir/sapi/phpdbg], [$abs_builddir/sapi/phpdbg]) PHP_SELECT_SAPI(phpdbg, program, $PHP_PHPDBG_FILES, $PHP_PHPDBG_CFLAGS, [$(SAPI_PHPDBG_PATH)]) BUILD_BINARY="sapi/phpdbg/phpdbg" diff --git a/sapi/phpdbg/phpdbg.h b/sapi/phpdbg/phpdbg.h index be009e40d..12350d542 100644 --- a/sapi/phpdbg/phpdbg.h +++ b/sapi/phpdbg/phpdbg.h @@ -69,11 +69,14 @@ # include <readline/history.h> #endif +#include "phpdbg_lexer.h" #include "phpdbg_cmd.h" #include "phpdbg_utils.h" #include "phpdbg_btree.h" #include "phpdbg_watch.h" +int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC); + #ifdef ZTS # define PHPDBG_G(v) TSRMG(phpdbg_globals_id, zend_phpdbg_globals *, v) #else @@ -176,10 +179,12 @@ ZEND_BEGIN_MODULE_GLOBALS(phpdbg) phpdbg_frame_t frame; /* frame */ zend_uint last_line; /* last executed line */ + phpdbg_lexer_data lexer; /* lexer data */ + phpdbg_param_t *parser_stack; /* param stack during lexer / parser phase */ + #ifndef _WIN32 struct sigaction old_sigsegv_signal; /* segv signal handler */ #endif - phpdbg_btree watchpoint_tree; /* tree with watchpoints */ phpdbg_btree watch_HashTables; /* tree with original dtors of watchpoints */ HashTable watchpoints; /* watchpoints */ diff --git a/sapi/phpdbg/phpdbg_btree.c b/sapi/phpdbg/phpdbg_btree.c index 8fc2561e0..491445399 100644 --- a/sapi/phpdbg/phpdbg_btree.c +++ b/sapi/phpdbg/phpdbg_btree.c @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/sapi/phpdbg/phpdbg_btree.h b/sapi/phpdbg/phpdbg_btree.h index 5fb217db3..af2a6ac31 100644 --- a/sapi/phpdbg/phpdbg_btree.h +++ b/sapi/phpdbg/phpdbg_btree.h @@ -2,7 +2,7 @@ +----------------------------------------------------------------------+ | PHP Version 5 | +----------------------------------------------------------------------+ - | Copyright (c) 1997-2013 The PHP Group | + | Copyright (c) 1997-2014 The PHP Group | +----------------------------------------------------------------------+ | This source file is subject to version 3.01 of the PHP license, | | that is bundled with this package in the file LICENSE, and is | diff --git a/sapi/phpdbg/phpdbg_lexer.c b/sapi/phpdbg/phpdbg_lexer.c index 94a4ba976..420dcac04 100644 --- a/sapi/phpdbg/phpdbg_lexer.c +++ b/sapi/phpdbg/phpdbg_lexer.c @@ -1,2271 +1,996 @@ -#line 2 "sapi/phpdbg/phpdbg_lexer.c" - -#line 4 "sapi/phpdbg/phpdbg_lexer.c" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 37 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <stdlib.h> - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include <inttypes.h> -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* Returned upon end-of-file. */ -#define YY_NULL 0 - -/* Promotes a possibly negative, possibly signed char to an unsigned - * integer for use as an array index. If the signed char is negative, - * we want to instead treat it as an 8-bit unsigned char, hence the - * double cast. - */ -#define YY_SC_TO_UI(c) ((unsigned int) (unsigned char) c) - -/* An opaque pointer. */ -#ifndef YY_TYPEDEF_YY_SCANNER_T -#define YY_TYPEDEF_YY_SCANNER_T -typedef void* yyscan_t; -#endif - -/* For convenience, these vars (plus the bison vars far below) - are macros in the reentrant scanner. */ -#define yyin yyg->yyin_r -#define yyout yyg->yyout_r -#define yyextra yyg->yyextra_r -#define yyleng yyg->yyleng_r -#define yytext yyg->yytext_r -#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) -#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) -#define yy_flex_debug yyg->yy_flex_debug_r - -/* Enter a start condition. This macro really ought to take a parameter, - * but we do it the disgusting crufty way forced on us by the ()-less - * definition of BEGIN. - */ -#define BEGIN yyg->yy_start = 1 + 2 * - -/* Translate the current start state into a value that can be later handed - * to BEGIN to return to the state. The YYSTATE alias is for lex - * compatibility. - */ -#define YY_START ((yyg->yy_start - 1) / 2) -#define YYSTATE YY_START - -/* Action number for EOF rule of a given start state. */ -#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) - -/* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ,yyscanner ) - -#define YY_END_OF_BUFFER_CHAR 0 - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -/* The state buf must be large enough to hold one state per character in the main buffer. - */ -#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; -#endif - -#define EOB_ACT_CONTINUE_SCAN 0 -#define EOB_ACT_END_OF_FILE 1 -#define EOB_ACT_LAST_MATCH 2 - - #define YY_LESS_LINENO(n) - -/* Return all but the first "n" matched characters back to the input stream. */ -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - *yy_cp = yyg->yy_hold_char; \ - YY_RESTORE_YY_MORE_OFFSET \ - yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ - YY_DO_BEFORE_ACTION; /* set up yytext again */ \ - } \ - while ( 0 ) - -#define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - -#define YY_BUFFER_NEW 0 -#define YY_BUFFER_NORMAL 1 - /* When an EOF's been seen but there's still some text to process - * then we mark the buffer as YY_EOF_PENDING, to indicate that we - * shouldn't try reading from the input source any more. We might - * still have a bunch of tokens to match, though, because of - * possible backing-up. - * - * When we actually see the EOF, we change the status to "new" - * (via yyrestart()), so that the user can continue scanning by - * just pointing yyin at a new input file. - */ -#define YY_BUFFER_EOF_PENDING 2 - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -/* We provide macros for accessing buffer states in case in the - * future we want to put the buffer states in a more general - * "scanner state". - * - * Returns the top of the stack, or NULL. - */ -#define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ - ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ - : NULL) - -/* Same as previous macro, but useful when we know that the buffer stack is not - * NULL or when we need an lvalue. For internal use only. - */ -#define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] - -void yyrestart (FILE *input_file ,yyscan_t yyscanner ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); -void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -void yypop_buffer_state (yyscan_t yyscanner ); - -static void yyensure_buffer_stack (yyscan_t yyscanner ); -static void yy_load_buffer_state (yyscan_t yyscanner ); -static void yy_init_buffer (YY_BUFFER_STATE b,FILE *file ,yyscan_t yyscanner ); - -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ,yyscanner) - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); - -void *yyalloc (yy_size_t ,yyscan_t yyscanner ); -void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); -void yyfree (void * ,yyscan_t yyscanner ); - -#define yy_new_buffer yy_create_buffer - -#define yy_set_interactive(is_interactive) \ - { \ - if ( ! YY_CURRENT_BUFFER ){ \ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ - } - -#define yy_set_bol(at_bol) \ - { \ - if ( ! YY_CURRENT_BUFFER ){\ - yyensure_buffer_stack (yyscanner); \ - YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); \ - } \ - YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ - } - -#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) - -/* Begin user sect3 */ - -#define yywrap(yyscanner) 1 -#define YY_SKIP_YYWRAP - -typedef unsigned char YY_CHAR; - -typedef int yy_state_type; - -#define yytext_ptr yytext_r - -static yy_state_type yy_get_previous_state (yyscan_t yyscanner ); -static yy_state_type yy_try_NUL_trans (yy_state_type current_state ,yyscan_t yyscanner); -static int yy_get_next_buffer (yyscan_t yyscanner ); -static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner ); - -/* Done after the current pattern has been matched and before the - * corresponding action - sets up yytext. - */ -#define YY_DO_BEFORE_ACTION \ - yyg->yytext_ptr = yy_bp; \ - yyleng = (size_t) (yy_cp - yy_bp); \ - yyg->yy_hold_char = *yy_cp; \ - *yy_cp = '\0'; \ - yyg->yy_c_buf_p = yy_cp; - -#define YY_NUM_RULES 18 -#define YY_END_OF_BUFFER 19 -/* This struct is not used in this scanner, - but its presence is necessary. */ -struct yy_trans_info - { - flex_int32_t yy_verify; - flex_int32_t yy_nxt; - }; -static yyconst flex_int16_t yy_acclist[229] = - { 0, - 19, 4, 15, 18, 4, 17, 18, 17, 18, 4, - 7, 18, 4, 12, 15, 18, 4, 12, 15, 18, - 4, 9, 18, 4, 15, 18, 4, 15, 18, 4, - 15, 18, 4, 15, 18, 4, 15, 18, 4, 15, - 18, 3, 4, 15, 18, 4, 15, 18, 4, 15, - 18, 4, 15, 18, 4, 15, 18, 16, 18, 16, - 17, 18, 15, 18, 7, 18, 12, 15, 18, 12, - 15, 18, 9, 18, 15, 18, 15, 18, 15, 18, - 15, 18, 15, 18, 15, 18, 15, 18, 15, 18, - 15, 18, 15, 18, 4, 15, 4, 4, 4, 17, - - 17, 4, 12, 15, 4, 15, 4, 8, 4, 15, - 4, 15, 4, 15, 1, 4, 15, 4, 15, 4, - 11, 15, 4, 15, 4, 10, 15, 4, 15, 2, - 4, 15, 4, 15, 4, 15, 4, 15, 16, 16, - 17, 15, 12, 15, 15, 8, 15, 15, 15, 15, - 5, 15, 11, 15, 15, 10, 15, 15, 15, 15, - 4, 4, 13, 15, 4, 15, 4, 15, 4, 15, - 4, 15, 3, 4, 15, 4, 15, 4, 15, 13, - 15, 15, 15, 15, 15, 15, 15, 4, 6, 4, - 15, 4, 15, 4, 15, 4, 15, 4, 15, 6, - - 15, 15, 15, 15, 15, 4, 15, 4, 15, 4, - 15, 15, 15, 15, 4, 14, 15, 4, 15, 4, - 15, 14, 15, 15, 15, 4, 15, 15 - } ; - -static yyconst flex_int16_t yy_accept[127] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 2, 5, 8, - 10, 13, 17, 21, 24, 27, 30, 33, 36, 39, - 42, 46, 49, 52, 55, 58, 60, 63, 65, 67, - 70, 73, 75, 77, 79, 81, 83, 85, 87, 89, - 91, 93, 95, 97, 98, 99, 101, 102, 105, 107, - 109, 111, 113, 115, 118, 120, 123, 125, 128, 130, - 133, 135, 137, 139, 140, 142, 143, 143, 145, 146, - 147, 148, 149, 150, 151, 153, 155, 156, 158, 159, - 160, 161, 162, 165, 167, 169, 171, 173, 176, 178, - 180, 180, 182, 183, 184, 185, 186, 187, 188, 190, - - 192, 194, 196, 198, 200, 201, 202, 203, 204, 205, - 206, 208, 210, 212, 213, 214, 215, 218, 220, 222, - 224, 225, 226, 228, 229, 229 - } ; - -static yyconst flex_int32_t yy_ec[256] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 5, 6, 7, 8, 8, - 8, 8, 8, 8, 8, 8, 8, 9, 1, 1, - 1, 1, 1, 1, 10, 10, 10, 11, 12, 10, - 13, 13, 13, 13, 13, 13, 13, 14, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 15, - 1, 1, 1, 1, 16, 1, 17, 18, 10, 19, - - 20, 21, 13, 22, 23, 13, 13, 24, 13, 25, - 26, 13, 13, 27, 28, 29, 30, 31, 13, 32, - 33, 34, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1 - } ; - -static yyconst flex_int32_t yy_meta[35] = - { 0, - 1, 2, 3, 2, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1 - } ; - -static yyconst flex_int16_t yy_base[133] = - { 0, - 0, 0, 33, 35, 38, 0, 357, 71, 74, 76, - 352, 79, 87, 90, 96, 100, 108, 109, 112, 120, - 123, 126, 138, 142, 148, 0, 104, 316, 455, 151, - 162, 313, 73, 92, 65, 146, 122, 94, 152, 127, - 155, 163, 172, 318, 131, 176, 182, 288, 190, 314, - 178, 184, 187, 211, 212, 215, 221, 224, 225, 235, - 236, 239, 245, 0, 203, 260, 259, 248, 264, 455, - 237, 190, 243, 253, 255, 222, 259, 194, 249, 250, - 277, 229, 0, 285, 286, 289, 295, 304, 307, 310, - 184, 0, 252, 283, 292, 296, 306, 309, 163, 328, - - 329, 332, 341, 344, 455, 326, 331, 330, 342, 343, - 362, 370, 371, 394, 368, 356, 410, 384, 404, 426, - 376, 378, 420, 411, 455, 442, 445, 447, 450, 148, - 452, 96 - } ; - -static yyconst flex_int16_t yy_def[133] = - { 0, - 125, 1, 126, 126, 125, 5, 125, 127, 128, 125, - 128, 127, 127, 128, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 127, 127, 129, 129, 130, 125, 130, - 130, 125, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 130, 127, 128, 128, 128, 125, 13, 13, 128, - 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, - 127, 127, 127, 129, 129, 130, 125, 130, 130, 125, - 130, 130, 130, 130, 130, 130, 130, 130, 130, 130, - 130, 128, 49, 127, 127, 127, 127, 127, 127, 127, - 125, 69, 130, 130, 130, 130, 130, 130, 128, 127, - - 127, 127, 127, 127, 125, 130, 130, 130, 130, 130, - 131, 127, 127, 132, 130, 130, 131, 127, 127, 132, - 130, 130, 127, 130, 0, 125, 125, 125, 125, 125, - 125, 125 - } ; - -static yyconst flex_int16_t yy_nxt[490] = - { 0, - 8, 9, 10, 11, 12, 8, 13, 12, 14, 8, - 8, 8, 8, 8, 15, 8, 8, 8, 16, 17, - 18, 8, 8, 8, 19, 20, 21, 22, 23, 8, - 8, 8, 24, 25, 27, 10, 27, 10, 28, 10, - 10, 29, 30, 28, 31, 30, 32, 28, 28, 28, - 28, 28, 33, 28, 28, 28, 34, 35, 36, 28, - 37, 28, 38, 39, 28, 28, 40, 28, 28, 28, - 41, 42, 44, 67, 44, 46, 47, 47, 47, 45, - 44, 67, 44, 48, 71, 48, 48, 45, 44, 73, - 44, 48, 125, 48, 48, 45, 120, 44, 50, 44, - - 67, 44, 67, 44, 45, 65, 47, 51, 45, 44, - 44, 44, 44, 44, 72, 44, 45, 45, 49, 76, - 45, 44, 52, 44, 44, 55, 44, 44, 45, 44, - 67, 45, 53, 125, 45, 67, 82, 56, 54, 44, - 57, 44, 75, 44, 58, 44, 45, 60, 66, 44, - 45, 44, 59, 79, 67, 68, 45, 68, 68, 67, - 67, 62, 74, 67, 61, 125, 68, 63, 68, 68, - 67, 67, 77, 44, 80, 44, 78, 46, 47, 44, - 45, 44, 81, 47, 47, 44, 45, 44, 44, 105, - 44, 84, 45, 69, 43, 45, 83, 83, 67, 83, - - 83, 83, 67, 86, 65, 47, 83, 83, 83, 83, - 83, 85, 44, 44, 44, 44, 44, 94, 44, 45, - 45, 43, 44, 45, 44, 44, 44, 44, 44, 45, - 67, 125, 45, 45, 99, 87, 44, 44, 44, 44, - 44, 56, 44, 45, 45, 67, 44, 45, 44, 88, - 93, 67, 68, 45, 68, 68, 67, 67, 67, 95, - 67, 67, 106, 67, 91, 89, 58, 67, 67, 90, - 92, 92, 67, 92, 92, 92, 96, 78, 97, 76, - 92, 92, 92, 92, 92, 67, 44, 44, 44, 44, - 44, 67, 44, 45, 45, 100, 44, 45, 44, 107, - - 67, 98, 101, 45, 67, 44, 102, 44, 44, 108, - 44, 44, 45, 44, 67, 45, 125, 67, 45, 43, - 125, 70, 103, 109, 67, 78, 58, 110, 104, 44, - 44, 44, 44, 44, 67, 44, 45, 45, 67, 67, - 45, 114, 44, 111, 44, 44, 112, 44, 115, 45, - 67, 67, 45, 116, 125, 113, 125, 125, 114, 111, - 56, 76, 43, 44, 67, 44, 43, 43, 43, 43, - 45, 44, 44, 44, 44, 122, 67, 43, 45, 45, - 125, 125, 125, 125, 67, 44, 67, 44, 125, 125, - 119, 121, 45, 118, 66, 124, 78, 125, 66, 66, - - 66, 66, 67, 123, 125, 44, 125, 44, 125, 66, - 43, 44, 45, 44, 43, 43, 43, 43, 45, 67, - 125, 44, 58, 44, 125, 43, 66, 125, 45, 76, - 66, 66, 66, 66, 67, 125, 125, 125, 56, 125, - 125, 66, 26, 26, 26, 43, 43, 44, 44, 44, - 64, 64, 117, 117, 7, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125 - } ; - -static yyconst flex_int16_t yy_chk[490] = - { 0, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 3, 3, 4, 4, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, - 5, 5, 8, 35, 8, 9, 9, 10, 10, 8, - 12, 33, 12, 12, 33, 12, 12, 12, 13, 35, - 13, 13, 14, 13, 13, 13, 132, 15, 14, 15, - - 34, 16, 38, 16, 15, 27, 27, 15, 16, 17, - 18, 17, 18, 19, 34, 19, 17, 18, 13, 38, - 19, 20, 16, 20, 21, 18, 21, 22, 20, 22, - 37, 21, 17, 45, 22, 40, 45, 19, 17, 23, - 20, 23, 37, 24, 20, 24, 23, 22, 130, 25, - 24, 25, 21, 40, 36, 30, 25, 30, 30, 30, - 39, 24, 36, 41, 23, 99, 31, 25, 31, 31, - 31, 42, 39, 43, 41, 43, 39, 46, 46, 51, - 43, 51, 42, 47, 47, 52, 51, 52, 53, 91, - 53, 51, 52, 31, 49, 53, 49, 49, 72, 49, - - 49, 49, 78, 53, 65, 65, 49, 49, 49, 49, - 49, 52, 54, 55, 54, 55, 56, 72, 56, 54, - 55, 49, 57, 56, 57, 58, 59, 58, 59, 57, - 76, 82, 58, 59, 82, 55, 60, 61, 60, 61, - 62, 57, 62, 60, 61, 71, 63, 62, 63, 59, - 71, 73, 68, 63, 68, 68, 68, 79, 80, 73, - 93, 74, 93, 75, 67, 61, 62, 77, 66, 63, - 69, 69, 69, 69, 69, 69, 74, 80, 79, 77, - 69, 69, 69, 69, 69, 81, 84, 85, 84, 85, - 86, 94, 86, 84, 85, 84, 87, 86, 87, 94, - - 95, 81, 85, 87, 96, 88, 86, 88, 89, 95, - 89, 90, 88, 90, 97, 89, 50, 98, 90, 48, - 44, 32, 87, 96, 28, 97, 89, 98, 90, 100, - 101, 100, 101, 102, 106, 102, 100, 101, 108, 107, - 102, 106, 103, 100, 103, 104, 101, 104, 107, 103, - 109, 110, 104, 108, 11, 102, 7, 0, 110, 104, - 103, 109, 111, 111, 116, 111, 111, 111, 111, 111, - 111, 112, 113, 112, 113, 116, 115, 111, 112, 113, - 0, 0, 0, 0, 121, 118, 122, 118, 0, 0, - 113, 115, 118, 112, 114, 121, 122, 0, 114, 114, - - 114, 114, 114, 118, 0, 119, 0, 119, 0, 114, - 117, 117, 119, 117, 117, 117, 117, 117, 117, 124, - 0, 123, 119, 123, 0, 117, 120, 0, 123, 124, - 120, 120, 120, 120, 120, 0, 0, 0, 123, 0, - 0, 120, 126, 126, 126, 127, 127, 128, 128, 128, - 129, 129, 131, 131, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 125, 125, 125, 125, 125, 125, 125 - } ; - -#define REJECT \ -{ \ -*yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */ \ -yy_cp = yyg->yy_full_match; /* restore poss. backed-over text */ \ -++yyg->yy_lp; \ -goto find_rule; \ -} - -#define yymore() yymore_used_but_not_detected -#define YY_MORE_ADJ 0 -#define YY_RESTORE_YY_MORE_OFFSET -#line 1 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -#line 2 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - +/* Generated by re2c 0.13.5 */ +#line 1 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" /* * phpdbg_lexer.l */ #include "phpdbg.h" #include "phpdbg_cmd.h" -#define YYSTYPE phpdbg_param_t #include "phpdbg_parser.h" - +#define LEX(v) (PHPDBG_G(lexer).v) -#define YY_NO_UNISTD_H 1 -#line 629 "sapi/phpdbg/phpdbg_lexer.c" +#define YYCTYPE unsigned char +#define YYSETCONDITION(x) LEX(state) = x; +#define YYGETCONDITION() LEX(state) +#define YYCURSOR LEX(cursor) +#define YYMARKER LEX(marker) +#define yyleng LEX(len) +#define yytext ((char*) LEX(text)) +#undef YYDEBUG +#define YYDEBUG(a, b) +#define YYFILL(n) -#define INITIAL 0 +#define NORMAL 0 #define RAW 1 -#define NORMAL 2 - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include <unistd.h> -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -/* Holds the entire state of the reentrant scanner. */ -struct yyguts_t - { - - /* User-defined. Not touched by flex. */ - YY_EXTRA_TYPE yyextra_r; +#define INITIAL 2 - /* The rest are the same as the globals declared in the non-reentrant scanner. */ - FILE *yyin_r, *yyout_r; - size_t yy_buffer_stack_top; /**< index of top of stack. */ - size_t yy_buffer_stack_max; /**< capacity of stack. */ - YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ - char yy_hold_char; - yy_size_t yy_n_chars; - yy_size_t yyleng_r; - char *yy_c_buf_p; - int yy_init; - int yy_start; - int yy_did_buffer_switch_on_eof; - int yy_start_stack_ptr; - int yy_start_stack_depth; - int *yy_start_stack; - yy_state_type yy_last_accepting_state; - char* yy_last_accepting_cpos; +ZEND_EXTERN_MODULE_GLOBALS(phpdbg); - int yylineno_r; - int yy_flex_debug_r; +void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { + PHPDBG_G(parser_stack) = stack; - yy_state_type *yy_state_buf; - yy_state_type *yy_state_ptr; - char *yy_full_match; - int yy_lp; + YYSETCONDITION(INITIAL); - /* These are only needed for trailing context rules, - * but there's no conditional variable for that yet. */ - int yy_looking_for_trail_begin; - int yy_full_lp; - int *yy_full_state; - - char *yytext_r; - int yy_more_flag; - int yy_more_len; - - YYSTYPE * yylval_r; - - }; /* end struct yyguts_t */ - -static int yy_init_globals (yyscan_t yyscanner ); - - /* This must go here because YYSTYPE and YYLTYPE are included - * from bison output in section 1.*/ - # define yylval yyg->yylval_r - -int yylex_init (yyscan_t* scanner); - -int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (yyscan_t yyscanner ); - -int yyget_debug (yyscan_t yyscanner ); - -void yyset_debug (int debug_flag ,yyscan_t yyscanner ); - -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); - -FILE *yyget_in (yyscan_t yyscanner ); - -void yyset_in (FILE * in_str ,yyscan_t yyscanner ); - -FILE *yyget_out (yyscan_t yyscanner ); - -void yyset_out (FILE * out_str ,yyscan_t yyscanner ); - -yy_size_t yyget_leng (yyscan_t yyscanner ); - -char *yyget_text (yyscan_t yyscanner ); - -int yyget_lineno (yyscan_t yyscanner ); - -void yyset_lineno (int line_number ,yyscan_t yyscanner ); - -int yyget_column (yyscan_t yyscanner ); - -void yyset_column (int column_no ,yyscan_t yyscanner ); - -YYSTYPE * yyget_lval (yyscan_t yyscanner ); - -void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (yyscan_t yyscanner ); -#else -extern int yywrap (yyscan_t yyscanner ); -#endif -#endif - - static void yyunput (int c,char *buf_ptr ,yyscan_t yyscanner); - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); -#endif - -#ifndef YY_NO_INPUT - -#ifdef __cplusplus -static int yyinput (yyscan_t yyscanner ); -#else -static int input (yyscan_t yyscanner ); -#endif - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Copy whatever the last rule matched to the standard output. */ -#ifndef ECHO -/* This used to be an fputs(), but since the string might contain NUL's, - * we now use fwrite(). - */ -#define ECHO do { if (fwrite( yytext, yyleng, 1, yyout )) {} } while (0) -#endif - -/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, - * is returned in "result". - */ -#ifndef YY_INPUT -#define YY_INPUT(buf,result,max_size) \ - if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ - { \ - int c = '*'; \ - size_t n; \ - for ( n = 0; n < max_size && \ - (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ - buf[n] = (char) c; \ - if ( c == '\n' ) \ - buf[n++] = (char) c; \ - if ( c == EOF && ferror( yyin ) ) \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - result = n; \ - } \ - else \ - { \ - errno=0; \ - while ( (result = fread(buf, 1, max_size, yyin))==0 && ferror(yyin)) \ - { \ - if( errno != EINTR) \ - { \ - YY_FATAL_ERROR( "input in flex scanner failed" ); \ - break; \ - } \ - errno=0; \ - clearerr(yyin); \ - } \ - }\ -\ - -#endif - -/* No semi-colon after return; correct usage is to write "yyterminate();" - - * we don't want an extra ';' after the "return" because that will cause - * some compilers to complain about unreachable statements. - */ -#ifndef yyterminate -#define yyterminate() return YY_NULL -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Report a fatal error. */ -#ifndef YY_FATAL_ERROR -#define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) -#endif - -/* end tables serialization structures and prototypes */ - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex \ - (YYSTYPE * yylval_param ,yyscan_t yyscanner); - -#define YY_DECL int yylex \ - (YYSTYPE * yylval_param , yyscan_t yyscanner) -#endif /* !YY_DECL */ + LEX(text) = YYCURSOR = (unsigned char *) input; + LEX(len) = strlen(input); +} -/* Code executed at the beginning of each rule, after yytext and yyleng - * have been set up. - */ -#ifndef YY_USER_ACTION -#define YY_USER_ACTION -#endif +int phpdbg_lex (phpdbg_param_t* yylval) { + TSRMLS_FETCH(); /* Slow, but this is not a major problem here. TODO: Use TSRMLS_DC */ -/* Code executed at the end of each rule. */ -#ifndef YY_BREAK -#define YY_BREAK break; -#endif +restart: + LEX(text) = YYCURSOR; -#define YY_RULE_SETUP \ - YY_USER_ACTION -/** The main scanner function which does all the work. - */ -YY_DECL +#line 48 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" { - register yy_state_type yy_current_state; - register char *yy_cp, *yy_bp; - register int yy_act; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - -#line 44 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - - -#line 882 "sapi/phpdbg/phpdbg_lexer.c" - - yylval = yylval_param; - - if ( !yyg->yy_init ) + YYCTYPE yych; + unsigned int yyaccept = 0; + if (YYGETCONDITION() < 1) { + goto yyc_NORMAL; + } else { + if (YYGETCONDITION() < 2) { + goto yyc_RAW; + } else { + goto yyc_INITIAL; + } + } +/* *********************************** */ +yyc_INITIAL: + { + static const unsigned char yybm[] = { + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 128, 128, 0, 0, 128, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 128, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, + }; + + YYDEBUG(0, *YYCURSOR); + YYFILL(3); + yych = *YYCURSOR; + if (yych <= 0x1F) { + if (yych <= '\t') { + if (yych <= 0x00) goto yy6; + if (yych <= 0x08) goto yy11; + } else { + if (yych <= '\n') goto yy4; + if (yych != '\r') goto yy11; + } + } else { + if (yych <= 'e') { + if (yych <= ' ') goto yy2; + if (yych <= 'd') goto yy11; + goto yy7; + } else { + if (yych <= 'q') goto yy11; + if (yych <= 'r') goto yy9; + if (yych <= 's') goto yy8; + goto yy11; + } + } +yy2: + YYDEBUG(2, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy19; + } +yy3: + YYDEBUG(3, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 161 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - yyg->yy_init = 1; - -#ifdef YY_USER_INIT - YY_USER_INIT; -#endif - - /* Create the reject buffer large enough to save one state per allowed character. */ - if ( ! yyg->yy_state_buf ) - yyg->yy_state_buf = (yy_state_type *)yyalloc(YY_STATE_BUF_SIZE ,yyscanner); - if ( ! yyg->yy_state_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yylex()" ); - - if ( ! yyg->yy_start ) - yyg->yy_start = 1; /* first start state */ + YYSETCONDITION(NORMAL); - if ( ! yyin ) - yyin = stdin; - - if ( ! yyout ) - yyout = stdout; - - if ( ! YY_CURRENT_BUFFER ) { - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); + YYCURSOR = LEX(text); + goto restart; +} +#line 138 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy4: + YYDEBUG(4, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy19; } - - yy_load_buffer_state(yyscanner ); + YYDEBUG(5, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return 0; +} +#line 151 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy6: + YYDEBUG(6, *YYCURSOR); + yych = *++YYCURSOR; + goto yy3; +yy7: + YYDEBUG(7, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'v') goto yy17; + goto yy3; +yy8: + YYDEBUG(8, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'h') goto yy15; + goto yy3; +yy9: + YYDEBUG(9, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'u') goto yy12; +yy10: + YYDEBUG(10, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 155 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_RUN; +} +#line 180 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy11: + YYDEBUG(11, *YYCURSOR); + yych = *++YYCURSOR; + goto yy3; +yy12: + YYDEBUG(12, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == 'n') goto yy14; + YYDEBUG(13, *YYCURSOR); + YYCURSOR = YYMARKER; + goto yy10; +yy14: + YYDEBUG(14, *YYCURSOR); + yych = *++YYCURSOR; + goto yy10; +yy15: + YYDEBUG(15, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(16, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 150 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_SHELL; +} +#line 207 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy17: + YYDEBUG(17, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(18, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 145 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_EVAL; +} +#line 219 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy19: + YYDEBUG(19, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(20, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy19; } - - while ( 1 ) /* loops until end-of-file is reached */ + YYDEBUG(21, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - yy_cp = yyg->yy_c_buf_p; + /* ignore whitespace */ - /* Support of yytext. */ - *yy_cp = yyg->yy_hold_char; - - /* yy_bp points to the position in yy_ch_buf of the start of - * the current run. - */ - yy_bp = yy_cp; - - yy_current_state = yyg->yy_start; - - yyg->yy_state_ptr = yyg->yy_state_buf; - *yyg->yy_state_ptr++ = yy_current_state; - -yy_match: - do - { - register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)]; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) - yy_c = yy_meta[(unsigned int) yy_c]; + goto restart; +} +#line 237 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" + } +/* *********************************** */ +yyc_NORMAL: + { + static const unsigned char yybm[] = { + 0, 16, 16, 16, 16, 16, 16, 16, + 16, 8, 8, 16, 16, 8, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 8, 16, 16, 0, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 48, 16, + 176, 176, 176, 176, 176, 176, 176, 176, + 176, 176, 0, 16, 16, 16, 16, 16, + 16, 208, 208, 208, 208, 208, 208, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 16, 16, 16, 16, 16, + 16, 208, 208, 208, 208, 208, 208, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 80, 80, 80, 80, 80, + 80, 80, 80, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + 16, 16, 16, 16, 16, 16, 16, 16, + }; + YYDEBUG(22, *YYCURSOR); + YYFILL(11); + yych = *YYCURSOR; + if (yych <= ':') { + if (yych <= ' ') { + if (yych <= '\n') { + if (yych <= 0x00) goto yy29; + if (yych <= 0x08) goto yy32; + if (yych >= '\n') goto yy27; + } else { + if (yych == '\r') goto yy24; + if (yych <= 0x1F) goto yy32; + } + } else { + if (yych <= '.') { + if (yych == '#') goto yy47; + if (yych <= '-') goto yy32; + goto yy34; + } else { + if (yych <= '/') goto yy32; + if (yych <= '0') goto yy37; + if (yych <= '9') goto yy34; + goto yy49; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yyg->yy_state_ptr++ = yy_current_state; - ++yy_cp; } - while ( yy_current_state != 125 ); - -yy_find_action: - yy_current_state = *--yyg->yy_state_ptr; - yyg->yy_lp = yy_accept[yy_current_state]; -find_rule: /* we branch to this label when backing up */ - for ( ; ; ) /* until we find what rule we matched */ - { - if ( yyg->yy_lp && yyg->yy_lp < yy_accept[yy_current_state + 1] ) - { - yy_act = yy_acclist[yyg->yy_lp]; - { - yyg->yy_full_match = yy_cp; - break; + } else { + if (yych <= 'i') { + if (yych <= 'd') { + if (yych == 'Z') goto yy38; + if (yych <= 'c') goto yy32; + goto yy39; + } else { + if (yych <= 'e') goto yy40; + if (yych <= 'f') goto yy41; + if (yych <= 'h') goto yy32; + goto yy30; + } + } else { + if (yych <= 's') { + if (yych <= 'm') goto yy32; + if (yych <= 'n') goto yy42; + if (yych <= 'o') goto yy43; + goto yy32; + } else { + if (yych <= 'x') { + if (yych <= 't') goto yy44; + goto yy32; + } else { + if (yych <= 'y') goto yy45; + if (yych <= 'z') goto yy46; + goto yy32; } } - --yy_cp; - yy_current_state = *--yyg->yy_state_ptr; - yyg->yy_lp = yy_accept[yy_current_state]; } + } +yy24: + YYDEBUG(24, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(25, *YYCURSOR); + if (yybm[0+yych] & 8) { + goto yy24; + } + YYDEBUG(26, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + /* ignore whitespace */ - YY_DO_BEFORE_ACTION; - -do_action: /* This label is used only to access EOF actions. */ - - switch ( yy_act ) - { /* beginning of action switch */ - -case 1: -YY_RULE_SETUP -#line 47 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_EVAL; - } - YY_BREAK -case 2: -YY_RULE_SETUP -#line 52 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_SHELL; - } - YY_BREAK -case 3: -YY_RULE_SETUP -#line 57 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_RUN; - } - YY_BREAK -case 4: -YY_RULE_SETUP -#line 63 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(NORMAL); - REJECT; - } - YY_BREAK - - -case 5: -YY_RULE_SETUP -#line 70 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_IF; - } - YY_BREAK - - -case 6: -YY_RULE_SETUP -#line 78 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_PROTO; - } - YY_BREAK -case 7: -YY_RULE_SETUP -#line 84 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ return T_POUND; } - YY_BREAK -case 8: -YY_RULE_SETUP -#line 85 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ return T_DCOLON; } - YY_BREAK -case 9: -YY_RULE_SETUP -#line 86 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ return T_COLON; } - YY_BREAK -case 10: -YY_RULE_SETUP -#line 88 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 1; - return T_TRUTHY; - } - YY_BREAK -case 11: -YY_RULE_SETUP -#line 93 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 0; - return T_FALSY; - } - YY_BREAK -case 12: -YY_RULE_SETUP -#line 98 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = atoi(yytext); - return T_DIGITS; - } - YY_BREAK -case 13: -YY_RULE_SETUP -#line 103 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, ADDR_PARAM); - yylval->addr = strtoul(yytext, 0, 16); - return T_ADDR; - } - YY_BREAK -case 14: -YY_RULE_SETUP -#line 108 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, OP_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_OPCODE; - } - YY_BREAK -case 15: -YY_RULE_SETUP -#line 114 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_ID; - } - YY_BREAK - -case 16: -YY_RULE_SETUP -#line 122 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ + goto restart; +} +#line 348 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy27: + YYDEBUG(27, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 8) { + goto yy24; + } +yy28: + YYDEBUG(28, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return 0; +} +#line 362 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy29: + YYDEBUG(29, *YYCURSOR); + yych = *++YYCURSOR; + goto yy28; +yy30: + YYDEBUG(30, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'f') goto yy94; + goto yy33; +yy31: + YYDEBUG(31, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; - BEGIN(INITIAL); - return T_INPUT; -} - YY_BREAK -case 17: -/* rule 17 can match eol */ -YY_RULE_SETUP -#line 130 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -{ /* ignore whitespace */ } - YY_BREAK -case 18: -YY_RULE_SETUP -#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" -YY_FATAL_ERROR( "flex scanner jammed" ); - YY_BREAK -#line 1129 "sapi/phpdbg/phpdbg_lexer.c" - case YY_STATE_EOF(INITIAL): - case YY_STATE_EOF(RAW): - case YY_STATE_EOF(NORMAL): - yyterminate(); - - case YY_END_OF_BUFFER: + return T_ID; +} +#line 383 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy32: + YYDEBUG(32, *YYCURSOR); + yyaccept = 0; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; +yy33: + YYDEBUG(33, *YYCURSOR); + if (yybm[0+yych] & 16) { + goto yy32; + } + if (yych <= '9') goto yy31; + goto yy54; +yy34: + YYDEBUG(34, *YYCURSOR); + yyaccept = 1; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(35, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy34; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy36; + if (yych <= 0x08) goto yy32; + } else { + if (yych != '\r') goto yy32; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy36; + if (yych <= '"') goto yy32; + } else { + if (yych == ':') goto yy54; + goto yy32; + } + } +yy36: + YYDEBUG(36, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 106 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - /* Amount of text matched not including the EOB char. */ - int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; - - /* Undo the effects of YY_DO_BEFORE_ACTION. */ - *yy_cp = yyg->yy_hold_char; - YY_RESTORE_YY_MORE_OFFSET - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) - { - /* We're scanning a new file or input source. It's - * possible that this happened because the user - * just pointed yyin at a new source and called - * yylex(). If so, then we have to assure - * consistency between YY_CURRENT_BUFFER and our - * globals. Here is the right place to do so, because - * this is the first action (other than possibly a - * back-up) that will match for the new input source. - */ - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = atoi(yytext); + return T_DIGITS; +} +#line 432 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy37: + YYDEBUG(37, *YYCURSOR); + yyaccept = 1; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy34; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy36; + if (yych <= 0x08) goto yy33; + goto yy36; + } else { + if (yych == '\r') goto yy36; + goto yy33; } - - /* Note that here we test for yy_c_buf_p "<=" to the position - * of the first EOB in the buffer, since yy_c_buf_p will - * already have been incremented past the NUL character - * (since all states make transitions on EOB to the - * end-of-buffer state). Contrast this with the test - * in input(). - */ - if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - { /* This was really a NUL. */ - yy_state_type yy_next_state; - - yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - /* Okay, we're now positioned to make the NUL - * transition. We couldn't have - * yy_get_previous_state() go ahead and do it - * for us because it doesn't know how to deal - * with the possibility of jamming (and we don't - * want to build jamming into it because then it - * will run more slowly). - */ - - yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); - - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - - if ( yy_next_state ) - { - /* Consume the NUL. */ - yy_cp = ++yyg->yy_c_buf_p; - yy_current_state = yy_next_state; - goto yy_match; + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy36; + if (yych <= '"') goto yy33; + goto yy36; + } else { + if (yych == 'x') goto yy90; + goto yy33; + } + } +yy38: + YYDEBUG(38, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'E') goto yy87; + goto yy33; +yy39: + YYDEBUG(39, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'i') goto yy81; + goto yy33; +yy40: + YYDEBUG(40, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'n') goto yy76; + goto yy33; +yy41: + YYDEBUG(41, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'a') goto yy73; + goto yy33; +yy42: + YYDEBUG(42, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'o') goto yy71; + goto yy33; +yy43: + YYDEBUG(43, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'f') goto yy70; + if (yych == 'n') goto yy66; + goto yy33; +yy44: + YYDEBUG(44, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'r') goto yy68; + goto yy33; +yy45: + YYDEBUG(45, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy65; + goto yy33; +yy46: + YYDEBUG(46, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy53; + goto yy33; +yy47: + YYDEBUG(47, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(48, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 84 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return T_POUND; +} +#line 523 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy49: + YYDEBUG(49, *YYCURSOR); + ++YYCURSOR; + if ((yych = *YYCURSOR) == ':') goto yy51; + YYDEBUG(50, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 90 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return T_COLON; +} +#line 534 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy51: + YYDEBUG(51, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(52, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 87 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + return T_DCOLON; +} +#line 544 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy53: + YYDEBUG(53, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'n') goto yy59; + goto yy33; +yy54: + YYDEBUG(54, *YYCURSOR); + yych = *++YYCURSOR; + if (yych == '/') goto yy56; +yy55: + YYDEBUG(55, *YYCURSOR); + YYCURSOR = YYMARKER; + if (yyaccept <= 3) { + if (yyaccept <= 1) { + if (yyaccept <= 0) { + goto yy31; + } else { + goto yy36; } - - else - { - yy_cp = yyg->yy_c_buf_p; - goto yy_find_action; + } else { + if (yyaccept <= 2) { + goto yy64; + } else { + goto yy67; } } - - else switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_END_OF_FILE: - { - yyg->yy_did_buffer_switch_on_eof = 0; - - if ( yywrap(yyscanner ) ) - { - /* Note: because we've taken care in - * yy_get_next_buffer() to have set up - * yytext, we can now set up - * yy_c_buf_p so that if some total - * hoser (like flex itself) wants to - * call the scanner after we return the - * YY_NULL, it'll still work - another - * YY_NULL will get returned. - */ - yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; - - yy_act = YY_STATE_EOF(YY_START); - goto do_action; - } - - else - { - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; - } - break; + } else { + if (yyaccept <= 5) { + if (yyaccept <= 4) { + goto yy72; + } else { + goto yy93; } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = - yyg->yytext_ptr + yy_amount_of_matched_text; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_match; - - case EOB_ACT_LAST_MATCH: - yyg->yy_c_buf_p = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; - - yy_current_state = yy_get_previous_state( yyscanner ); - - yy_cp = yyg->yy_c_buf_p; - yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; - goto yy_find_action; + } else { + goto yy95; } - break; } - - default: - YY_FATAL_ERROR( - "fatal flex scanner internal error--no action found" ); - } /* end of action switch */ - } /* end of scanning one token */ -} /* end of yylex */ - -/* yy_get_next_buffer - try to read in a new buffer - * - * Returns a code representing an action: - * EOB_ACT_LAST_MATCH - - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position - * EOB_ACT_END_OF_FILE - end of file - */ -static int yy_get_next_buffer (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; - register char *source = yyg->yytext_ptr; - register int number_to_move, i; - int ret_val; - - if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) - YY_FATAL_ERROR( - "fatal flex scanner internal error--end of buffer missed" ); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) - { /* Don't try to fill the buffer, so this is an EOF. */ - if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) - { - /* We matched a single character, the EOB, so - * treat this as a final EOF. - */ - return EOB_ACT_END_OF_FILE; +yy56: + YYDEBUG(56, *YYCURSOR); + yych = *++YYCURSOR; + if (yych != '/') goto yy55; + YYDEBUG(57, *YYCURSOR); + ++YYCURSOR; + YYDEBUG(58, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 78 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_PROTO; +} +#line 598 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy59: + YYDEBUG(59, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'd') goto yy33; + YYDEBUG(60, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != '_') goto yy33; +yy61: + YYDEBUG(61, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy62; + } + goto yy33; +yy62: + YYDEBUG(62, *YYCURSOR); + yyaccept = 2; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(63, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy62; + } + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy64; + if (yych <= 0x08) goto yy32; + } else { + if (yych != '\r') goto yy32; } - - else - { - /* We matched some text prior to the EOB, first - * process it. - */ - return EOB_ACT_LAST_MATCH; + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy64; + if (yych <= '"') goto yy32; + } else { + if (yych == ':') goto yy54; + goto yy32; } } - - /* Try to read more data. */ - - /* First move last chars to start of buffer. */ - number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr) - 1; - - for ( i = 0; i < number_to_move; ++i ) - *(dest++) = *(source++); - - if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) - /* don't do the read, it's not guaranteed to return an EOF, - * just force an EOF - */ - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; - - else +yy64: + YYDEBUG(64, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 118 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - yy_size_t num_to_read = - YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; - - while ( num_to_read <= 0 ) - { /* Not enough room in the buffer - grow it. */ - - YY_FATAL_ERROR( -"input buffer overflow, can't enlarge buffer because scanner uses REJECT" ); - + phpdbg_init_param(yylval, OP_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_OPCODE; +} +#line 652 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy65: + YYDEBUG(65, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 's') goto yy33; +yy66: + YYDEBUG(66, *YYCURSOR); + yyaccept = 3; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy33; + } else { + if (yych <= '\n') goto yy67; + if (yych <= '\f') goto yy33; + } + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy33; + } else { + if (yych != '#') goto yy33; } - - if ( num_to_read > YY_READ_BUF_SIZE ) - num_to_read = YY_READ_BUF_SIZE; - - /* Read in more data. */ - YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), - yyg->yy_n_chars, num_to_read ); - - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } - - if ( yyg->yy_n_chars == 0 ) +yy67: + YYDEBUG(67, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 94 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - if ( number_to_move == YY_MORE_ADJ ) - { - ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ,yyscanner); + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 1; + return T_TRUTHY; +} +#line 685 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy68: + YYDEBUG(68, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'u') goto yy33; + YYDEBUG(69, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy66; + goto yy33; +yy70: + YYDEBUG(70, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'f') goto yy33; +yy71: + YYDEBUG(71, *YYCURSOR); + yyaccept = 4; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy33; + } else { + if (yych <= '\n') goto yy72; + if (yych <= '\f') goto yy33; } - - else - { - ret_val = EOB_ACT_LAST_MATCH; - YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = - YY_BUFFER_EOF_PENDING; + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy33; + } else { + if (yych != '#') goto yy33; } } - - else - ret_val = EOB_ACT_CONTINUE_SCAN; - - if ((yy_size_t) (yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { - /* Extend the array by 50%, plus the number we really need. */ - yy_size_t new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size ,yyscanner ); - if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); - } - - yyg->yy_n_chars += number_to_move; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; - - yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; - - return ret_val; -} - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - - static yy_state_type yy_get_previous_state (yyscan_t yyscanner) -{ - register yy_state_type yy_current_state; - register char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_current_state = yyg->yy_start; - - yyg->yy_state_ptr = yyg->yy_state_buf; - *yyg->yy_state_ptr++ = yy_current_state; - - for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) +yy72: + YYDEBUG(72, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 100 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) - yy_c = yy_meta[(unsigned int) yy_c]; - } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - *yyg->yy_state_ptr++ = yy_current_state; + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 0; + return T_FALSY; +} +#line 728 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy73: + YYDEBUG(73, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'l') goto yy33; + YYDEBUG(74, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 's') goto yy33; + YYDEBUG(75, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'e') goto yy71; + goto yy33; +yy76: + YYDEBUG(76, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'a') goto yy33; + YYDEBUG(77, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'b') goto yy33; + YYDEBUG(78, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'l') goto yy33; + YYDEBUG(79, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'e') goto yy33; + YYDEBUG(80, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'd') goto yy66; + goto yy33; +yy81: + YYDEBUG(81, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 's') goto yy33; + YYDEBUG(82, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'a') goto yy33; + YYDEBUG(83, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'b') goto yy33; + YYDEBUG(84, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'l') goto yy33; + YYDEBUG(85, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'e') goto yy33; + YYDEBUG(86, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == 'd') goto yy71; + goto yy33; +yy87: + YYDEBUG(87, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'N') goto yy33; + YYDEBUG(88, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych != 'D') goto yy33; + YYDEBUG(89, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yych == '_') goto yy61; + goto yy33; +yy90: + YYDEBUG(90, *YYCURSOR); + yyaccept = 0; + yych = *(YYMARKER = ++YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy91; } - - return yy_current_state; -} - -/* yy_try_NUL_trans - try to make a transition on the NUL character - * - * synopsis - * next_state = yy_try_NUL_trans( current_state ); - */ - static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) -{ - register int yy_is_jam; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ - - register YY_CHAR yy_c = 1; - while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) - { - yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 126 ) - yy_c = yy_meta[(unsigned int) yy_c]; + goto yy33; +yy91: + YYDEBUG(91, *YYCURSOR); + yyaccept = 5; + YYMARKER = ++YYCURSOR; + YYFILL(3); + yych = *YYCURSOR; + YYDEBUG(92, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy91; } - yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 125); - if ( ! yy_is_jam ) - *yyg->yy_state_ptr++ = yy_current_state; - - (void)yyg; - return yy_is_jam ? 0 : yy_current_state; -} - - static void yyunput (int c, register char * yy_bp , yyscan_t yyscanner) -{ - register char *yy_cp; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_cp = yyg->yy_c_buf_p; - - /* undo effects of setting up yytext */ - *yy_cp = yyg->yy_hold_char; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - { /* need to shift things up to make room */ - /* +2 for EOB chars. */ - register yy_size_t number_to_move = yyg->yy_n_chars + 2; - register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[ - YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2]; - register char *source = - &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]; - - while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) - *--dest = *--source; - - yy_cp += (int) (dest - source); - yy_bp += (int) (dest - source); - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_buf_size; - - if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 ) - YY_FATAL_ERROR( "flex scanner push-back overflow" ); + if (yych <= 0x1F) { + if (yych <= '\n') { + if (yych <= 0x00) goto yy93; + if (yych <= 0x08) goto yy32; + } else { + if (yych != '\r') goto yy32; + } + } else { + if (yych <= '#') { + if (yych <= ' ') goto yy93; + if (yych <= '"') goto yy32; + } else { + if (yych == ':') goto yy54; + goto yy32; + } } - - *--yy_cp = (char) c; - - yyg->yytext_ptr = yy_bp; - yyg->yy_hold_char = *yy_cp; - yyg->yy_c_buf_p = yy_cp; -} - -#ifndef YY_NO_INPUT -#ifdef __cplusplus - static int yyinput (yyscan_t yyscanner) -#else - static int input (yyscan_t yyscanner) -#endif - -{ - int c; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - *yyg->yy_c_buf_p = yyg->yy_hold_char; - - if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) +yy93: + YYDEBUG(93, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 112 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - /* yy_c_buf_p now points to the character we want to return. - * If this occurs *before* the EOB characters, then it's a - * valid NUL; if not, then we've hit the end of the buffer. - */ - if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) - /* This was really a NUL. */ - *yyg->yy_c_buf_p = '\0'; - - else - { /* need more input */ - yy_size_t offset = yyg->yy_c_buf_p - yyg->yytext_ptr; - ++yyg->yy_c_buf_p; - - switch ( yy_get_next_buffer( yyscanner ) ) - { - case EOB_ACT_LAST_MATCH: - /* This happens because yy_g_n_b() - * sees that we've accumulated a - * token and flags that we need to - * try matching the token before - * proceeding. But for input(), - * there's no matching to consider. - * So convert the EOB_ACT_LAST_MATCH - * to EOB_ACT_END_OF_FILE. - */ - - /* Reset buffer status. */ - yyrestart(yyin ,yyscanner); - - /*FALLTHROUGH*/ - - case EOB_ACT_END_OF_FILE: - { - if ( yywrap(yyscanner ) ) - return EOF; - - if ( ! yyg->yy_did_buffer_switch_on_eof ) - YY_NEW_FILE; -#ifdef __cplusplus - return yyinput(yyscanner); -#else - return input(yyscanner); -#endif - } - - case EOB_ACT_CONTINUE_SCAN: - yyg->yy_c_buf_p = yyg->yytext_ptr + offset; - break; - } + phpdbg_init_param(yylval, ADDR_PARAM); + yylval->addr = strtoul(yytext, 0, 16); + return T_ADDR; +} +#line 848 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy94: + YYDEBUG(94, *YYCURSOR); + yyaccept = 6; + yych = *(YYMARKER = ++YYCURSOR); + if (yych <= '\r') { + if (yych <= 0x08) { + if (yych >= 0x01) goto yy33; + } else { + if (yych <= '\n') goto yy95; + if (yych <= '\f') goto yy33; + } + } else { + if (yych <= ' ') { + if (yych <= 0x1F) goto yy33; + } else { + if (yych != '#') goto yy33; } } - - c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ - *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ - yyg->yy_hold_char = *++yyg->yy_c_buf_p; - - return c; +yy95: + YYDEBUG(95, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 72 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_IF; } -#endif /* ifndef YY_NO_INPUT */ - -/** Immediately switch to a different input stream. - * @param input_file A readable stream. - * @param yyscanner The scanner object. - * @note This function does not reset the start condition to @c INITIAL . - */ - void yyrestart (FILE * input_file , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! YY_CURRENT_BUFFER ){ - yyensure_buffer_stack (yyscanner); - YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ,yyscanner); +#line 876 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } - - yy_init_buffer(YY_CURRENT_BUFFER,input_file ,yyscanner); - yy_load_buffer_state(yyscanner ); -} - -/** Switch to a different input buffer. - * @param new_buffer The new input buffer. - * @param yyscanner The scanner object. - */ - void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* TODO. We should be able to replace this entire function body - * with - * yypop_buffer_state(); - * yypush_buffer_state(new_buffer); - */ - yyensure_buffer_stack (yyscanner); - if ( YY_CURRENT_BUFFER == new_buffer ) - return; - - if ( YY_CURRENT_BUFFER ) - { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; +/* *********************************** */ +yyc_RAW: + { + static const unsigned char yybm[] = { + 0, 64, 64, 64, 64, 64, 64, 64, + 64, 224, 128, 64, 64, 224, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 224, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + 64, 64, 64, 64, 64, 64, 64, 64, + }; + YYDEBUG(96, *YYCURSOR); + YYFILL(2); + yych = *YYCURSOR; + if (yybm[0+yych] & 32) { + goto yy98; } - - YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state(yyscanner ); - - /* We don't actually know whether we did this switch during - * EOF (yywrap()) processing, but the only time this flag - * is looked at is after yywrap() is called, so it's safe - * to go ahead and always set it. - */ - yyg->yy_did_buffer_switch_on_eof = 1; -} - -static void yy_load_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; - yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; - yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; - yyg->yy_hold_char = *yyg->yy_c_buf_p; -} - -/** Allocate and initialize an input buffer state. - * @param file A readable stream. - * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. - * @param yyscanner The scanner object. - * @return the allocated buffer state. - */ - YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_buf_size = size; - - /* yy_ch_buf has to be 2 characters longer than the size given because - * we need to put in 2 end-of-buffer characters. - */ - b->yy_ch_buf = (char *) yyalloc(b->yy_buf_size + 2 ,yyscanner ); - if ( ! b->yy_ch_buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); - - b->yy_is_our_buffer = 1; - - yy_init_buffer(b,file ,yyscanner); - - return b; -} - -/** Destroy the buffer. - * @param b a buffer created with yy_create_buffer() - * @param yyscanner The scanner object. - */ - void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if ( ! b ) - return; - - if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ - YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; - - if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ,yyscanner ); - - yyfree((void *) b ,yyscanner ); -} - -/* Initializes or reinitializes a buffer. - * This function is sometimes called more than once on the same buffer, - * such as during a yyrestart() or at EOF. - */ - static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) - -{ - int oerrno = errno; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - yy_flush_buffer(b ,yyscanner); - - b->yy_input_file = file; - b->yy_fill_buffer = 1; - - /* If b is the current buffer, then yy_init_buffer was _probably_ - * called from yyrestart() or through yy_get_next_buffer. - * In that case, we don't want to reset the lineno or column. - */ - if (b != YY_CURRENT_BUFFER){ - b->yy_bs_lineno = 1; - b->yy_bs_column = 0; - } - - b->yy_is_interactive = 0; - - errno = oerrno; -} - -/** Discard all buffered characters. On the next scan, YY_INPUT will be called. - * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. - * @param yyscanner The scanner object. - */ - void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if ( ! b ) - return; - - b->yy_n_chars = 0; - - /* We always need two end-of-buffer characters. The first causes - * a transition to the end-of-buffer state. The second causes - * a jam in that state. - */ - b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; - b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; - - b->yy_buf_pos = &b->yy_ch_buf[0]; - - b->yy_at_bol = 1; - b->yy_buffer_status = YY_BUFFER_NEW; - - if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state(yyscanner ); + if (yych <= 0x00) goto yy103; + if (yych == '\n') goto yy101; + goto yy104; +yy98: + YYDEBUG(98, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(99, *YYCURSOR); + if (yybm[0+yych] & 32) { + goto yy98; + } + if (yych <= 0x00) goto yy100; + if (yych == '\n') goto yy106; + goto yy104; +yy100: + YYDEBUG(100, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 132 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_INPUT; } - -/** Pushes the new state onto the stack. The new state becomes - * the current state. This function will allocate the stack - * if necessary. - * @param new_buffer The new state. - * @param yyscanner The scanner object. - */ -void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (new_buffer == NULL) - return; - - yyensure_buffer_stack(yyscanner); - - /* This block is copied from yy_switch_to_buffer. */ - if ( YY_CURRENT_BUFFER ) +#line 946 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy101: + YYDEBUG(101, *YYCURSOR); + ++YYCURSOR; + if (yybm[0+(yych = *YYCURSOR)] & 128) { + goto yy106; + } +yy102: + YYDEBUG(102, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 68 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" { - /* Flush out information for old buffer. */ - *yyg->yy_c_buf_p = yyg->yy_hold_char; - YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; - YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; + return 0; +} +#line 960 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" +yy103: + YYDEBUG(103, *YYCURSOR); + yych = *++YYCURSOR; + goto yy102; +yy104: + YYDEBUG(104, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(105, *YYCURSOR); + if (yybm[0+yych] & 64) { + goto yy104; } + goto yy100; +yy106: + YYDEBUG(106, *YYCURSOR); + ++YYCURSOR; + YYFILL(1); + yych = *YYCURSOR; + YYDEBUG(107, *YYCURSOR); + if (yybm[0+yych] & 128) { + goto yy106; + } + YYDEBUG(108, *YYCURSOR); + yyleng = (size_t) YYCURSOR - (size_t) yytext; +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" + { + /* ignore whitespace */ - /* Only push if top exists. Otherwise, replace top. */ - if (YY_CURRENT_BUFFER) - yyg->yy_buffer_stack_top++; - YY_CURRENT_BUFFER_LVALUE = new_buffer; - - /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state(yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; -} - -/** Removes and deletes the top of the stack, if present. - * The next element becomes the new top. - * @param yyscanner The scanner object. - */ -void yypop_buffer_state (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - if (!YY_CURRENT_BUFFER) - return; - - yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner); - YY_CURRENT_BUFFER_LVALUE = NULL; - if (yyg->yy_buffer_stack_top > 0) - --yyg->yy_buffer_stack_top; - - if (YY_CURRENT_BUFFER) { - yy_load_buffer_state(yyscanner ); - yyg->yy_did_buffer_switch_on_eof = 1; - } -} - -/* Allocates the stack if it does not exist. - * Guarantees space for at least one push. - */ -static void yyensure_buffer_stack (yyscan_t yyscanner) -{ - yy_size_t num_to_alloc; - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (!yyg->yy_buffer_stack) { - - /* First allocation is just for 2 elements, since we don't know if this - * scanner will even need a stack. We use 2 instead of 1 to avoid an - * immediate realloc on the next call. - */ - num_to_alloc = 1; - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc - (num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - - yyg->yy_buffer_stack_max = num_to_alloc; - yyg->yy_buffer_stack_top = 0; - return; - } - - if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ - - /* Increase the buffer to prepare for a possible push. */ - int grow_size = 8 /* arbitrary grow size */; - - num_to_alloc = yyg->yy_buffer_stack_max + grow_size; - yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc - (yyg->yy_buffer_stack, - num_to_alloc * sizeof(struct yy_buffer_state*) - , yyscanner); - if ( ! yyg->yy_buffer_stack ) - YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - - /* zero only the new slots.*/ - memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); - yyg->yy_buffer_stack_max = num_to_alloc; - } -} - -/** Setup the input buffer state to scan directly from a user-specified character buffer. - * @param base the character buffer - * @param size the size in bytes of the character buffer - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - - if ( size < 2 || - base[size-2] != YY_END_OF_BUFFER_CHAR || - base[size-1] != YY_END_OF_BUFFER_CHAR ) - /* They forgot to leave room for the EOB's. */ - return 0; - - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ,yyscanner ); - if ( ! b ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); - - b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */ - b->yy_buf_pos = b->yy_ch_buf = base; - b->yy_is_our_buffer = 0; - b->yy_input_file = 0; - b->yy_n_chars = b->yy_buf_size; - b->yy_is_interactive = 0; - b->yy_at_bol = 1; - b->yy_fill_buffer = 0; - b->yy_buffer_status = YY_BUFFER_NEW; - - yy_switch_to_buffer(b ,yyscanner ); - - return b; -} - -/** Setup the input buffer state to scan a string. The next call to yylex() will - * scan from a @e copy of @a str. - * @param yystr a NUL-terminated string to scan - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - * @note If you want to scan bytes that may contain NUL values, then use - * yy_scan_bytes() instead. - */ -YY_BUFFER_STATE yy_scan_string (yyconst char * yystr , yyscan_t yyscanner) -{ - - return yy_scan_bytes(yystr,strlen(yystr) ,yyscanner); -} - -/** Setup the input buffer state to scan the given bytes. The next call to yylex() will - * scan from a @e copy of @a bytes. - * @param yybytes the byte buffer to scan - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. - * @param yyscanner The scanner object. - * @return the newly allocated buffer state object. - */ -YY_BUFFER_STATE yy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len , yyscan_t yyscanner) -{ - YY_BUFFER_STATE b; - char *buf; - yy_size_t n; - yy_size_t i; - - /* Get memory for full buffer, including space for trailing EOB's. */ - n = _yybytes_len + 2; - buf = (char *) yyalloc(n ,yyscanner ); - if ( ! buf ) - YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); - - for ( i = 0; i < _yybytes_len; ++i ) - buf[i] = yybytes[i]; - - buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - - b = yy_scan_buffer(buf,n ,yyscanner); - if ( ! b ) - YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); - - /* It's okay to grow etc. this buffer, and we should throw it - * away when we're done. - */ - b->yy_is_our_buffer = 1; - - return b; -} - -#ifndef YY_EXIT_FAILURE -#define YY_EXIT_FAILURE 2 -#endif - -static void yy_fatal_error (yyconst char* msg , yyscan_t yyscanner) -{ - (void) fprintf( stderr, "%s\n", msg ); - exit( YY_EXIT_FAILURE ); -} - -/* Redefine yyless() so it works in section 3 code. */ - -#undef yyless -#define yyless(n) \ - do \ - { \ - /* Undo effects of setting up yytext. */ \ - int yyless_macro_arg = (n); \ - YY_LESS_LINENO(yyless_macro_arg);\ - yytext[yyleng] = yyg->yy_hold_char; \ - yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ - yyg->yy_hold_char = *yyg->yy_c_buf_p; \ - *yyg->yy_c_buf_p = '\0'; \ - yyleng = yyless_macro_arg; \ - } \ - while ( 0 ) - -/* Accessor methods (get/set functions) to struct members. */ - -/** Get the user-defined data for this scanner. - * @param yyscanner The scanner object. - */ -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyextra; -} - -/** Get the current line number. - * @param yyscanner The scanner object. - */ -int yyget_lineno (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yylineno; -} - -/** Get the current column number. - * @param yyscanner The scanner object. - */ -int yyget_column (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - if (! YY_CURRENT_BUFFER) - return 0; - - return yycolumn; -} - -/** Get the input stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_in (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyin; -} - -/** Get the output stream. - * @param yyscanner The scanner object. - */ -FILE *yyget_out (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyout; -} - -/** Get the length of the current token. - * @param yyscanner The scanner object. - */ -yy_size_t yyget_leng (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yyleng; -} - -/** Get the current token. - * @param yyscanner The scanner object. - */ - -char *yyget_text (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yytext; -} - -/** Set the user-defined data. This data is never touched by the scanner. - * @param user_defined The data to be associated with this scanner. - * @param yyscanner The scanner object. - */ -void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyextra = user_defined ; -} - -/** Set the current line number. - * @param line_number - * @param yyscanner The scanner object. - */ -void yyset_lineno (int line_number , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* lineno is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); - - yylineno = line_number; -} - -/** Set the current column. - * @param line_number - * @param yyscanner The scanner object. - */ -void yyset_column (int column_no , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* column is only valid if an input buffer exists. */ - if (! YY_CURRENT_BUFFER ) - YY_FATAL_ERROR( "yyset_column called with no buffer" ); - - yycolumn = column_no; -} - -/** Set the input stream. This does not discard the current - * input buffer. - * @param in_str A readable stream. - * @param yyscanner The scanner object. - * @see yy_switch_to_buffer - */ -void yyset_in (FILE * in_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyin = in_str ; -} - -void yyset_out (FILE * out_str , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yyout = out_str ; -} - -int yyget_debug (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yy_flex_debug; -} - -void yyset_debug (int bdebug , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yy_flex_debug = bdebug ; -} - -/* Accessor methods for yylval and yylloc */ - -YYSTYPE * yyget_lval (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - return yylval; -} - -void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - yylval = yylval_param; -} - -/* User-visible API */ - -/* yylex_init is special because it creates the scanner itself, so it is - * the ONLY reentrant function that doesn't take the scanner as the last argument. - * That's why we explicitly handle the declaration, instead of using our macros. - */ - -int yylex_init(yyscan_t* ptr_yy_globals) - -{ - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - return yy_init_globals ( *ptr_yy_globals ); -} - -/* yylex_init_extra has the same functionality as yylex_init, but follows the - * convention of taking the scanner as the last argument. Note however, that - * this is a *pointer* to a scanner, as it will be allocated by this call (and - * is the reason, too, why this function also must handle its own declaration). - * The user defined value in the first argument will be available to yyalloc in - * the yyextra field. - */ - -int yylex_init_extra(YY_EXTRA_TYPE yy_user_defined,yyscan_t* ptr_yy_globals ) - -{ - struct yyguts_t dummy_yyguts; - - yyset_extra (yy_user_defined, &dummy_yyguts); - - if (ptr_yy_globals == NULL){ - errno = EINVAL; - return 1; - } - - *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); - - if (*ptr_yy_globals == NULL){ - errno = ENOMEM; - return 1; - } - - /* By setting to 0xAA, we expose bugs in - yy_init_globals. Leave at 0x00 for releases. */ - memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); - - yyset_extra (yy_user_defined, *ptr_yy_globals); - - return yy_init_globals ( *ptr_yy_globals ); -} - -static int yy_init_globals (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - /* Initialization is the same as for the non-reentrant scanner. - * This function is called from yylex_destroy(), so don't allocate here. - */ - - yyg->yy_buffer_stack = 0; - yyg->yy_buffer_stack_top = 0; - yyg->yy_buffer_stack_max = 0; - yyg->yy_c_buf_p = (char *) 0; - yyg->yy_init = 0; - yyg->yy_start = 0; - - yyg->yy_start_stack_ptr = 0; - yyg->yy_start_stack_depth = 0; - yyg->yy_start_stack = NULL; - - yyg->yy_state_buf = 0; - yyg->yy_state_ptr = 0; - yyg->yy_full_match = 0; - yyg->yy_lp = 0; - -/* Defined in main.c */ -#ifdef YY_STDINIT - yyin = stdin; - yyout = stdout; -#else - yyin = (FILE *) 0; - yyout = (FILE *) 0; -#endif - - /* For future reference: Set errno on error, since we are called by - * yylex_init() - */ - return 0; + goto restart; } - -/* yylex_destroy is for both reentrant and non-reentrant scanners. */ -int yylex_destroy (yyscan_t yyscanner) -{ - struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; - - /* Pop the buffer stack, destroying each element. */ - while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ,yyscanner ); - YY_CURRENT_BUFFER_LVALUE = NULL; - yypop_buffer_state(yyscanner); +#line 992 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.c" } - - /* Destroy the stack itself. */ - yyfree(yyg->yy_buffer_stack ,yyscanner); - yyg->yy_buffer_stack = NULL; - - /* Destroy the start condition stack. */ - yyfree(yyg->yy_start_stack ,yyscanner ); - yyg->yy_start_stack = NULL; - - yyfree ( yyg->yy_state_buf , yyscanner); - yyg->yy_state_buf = NULL; - - /* Reset the globals. This is important in a non-reentrant scanner so the next time - * yylex() is called, initialization will occur. */ - yy_init_globals( yyscanner); - - /* Destroy the main struct (reentrant only). */ - yyfree ( yyscanner , yyscanner ); - yyscanner = NULL; - return 0; -} - -/* - * Internal utility routines. - */ - -#ifndef yytext_ptr -static void yy_flex_strncpy (char* s1, yyconst char * s2, int n , yyscan_t yyscanner) -{ - register int i; - for ( i = 0; i < n; ++i ) - s1[i] = s2[i]; -} -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * s , yyscan_t yyscanner) -{ - register int n; - for ( n = 0; s[n]; ++n ) - ; - - return n; -} -#endif - -void *yyalloc (yy_size_t size , yyscan_t yyscanner) -{ - return (void *) malloc( size ); } +#line 168 "/var/root/php-src/sapi/phpdbg/phpdbg_lexer.l" -void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) -{ - /* The cast to (char *) in the following accommodates both - * implementations that use char* generic pointers, and those - * that use void* generic pointers. It works with the latter - * because both ANSI C and C++ allow castless assignment from - * any pointer type to void*, and deal with argument conversions - * as though doing an assignment. - */ - return (void *) realloc( (char *) ptr, size ); } - -void yyfree (void * ptr , yyscan_t yyscanner) -{ - free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ -} - -#define YYTABLES_NAME "yytables" - -#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - - - diff --git a/sapi/phpdbg/phpdbg_lexer.h b/sapi/phpdbg/phpdbg_lexer.h index 1958cef9a..ab51e7daa 100644 --- a/sapi/phpdbg/phpdbg_lexer.h +++ b/sapi/phpdbg/phpdbg_lexer.h @@ -1,348 +1,41 @@ -#ifndef yyHEADER_H -#define yyHEADER_H 1 -#define yyIN_HEADER 1 +/* + +----------------------------------------------------------------------+ + | PHP Version 5 | + +----------------------------------------------------------------------+ + | Copyright (c) 1997-2014 The PHP Group | + +----------------------------------------------------------------------+ + | This source file is subject to version 3.01 of the PHP license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.php.net/license/3_01.txt | + | If you did not receive a copy of the PHP license and are unable to | + | obtain it through the world-wide-web, please send a note to | + | license@php.net so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Authors: Felipe Pena <felipe@php.net> | + | Authors: Joe Watkins <joe.watkins@live.co.uk> | + | Authors: Bob Weinand <bwoebi@php.net> | + +----------------------------------------------------------------------+ +*/ + +#ifndef PHPDBG_LEXER_H +#define PHPDBG_LEXER_H + +#include "phpdbg_cmd.h" + +typedef struct { + unsigned int len; + unsigned char *text; + unsigned char *cursor; + unsigned char *marker; + int state; +} phpdbg_lexer_data; + +#define yyparse phpdbg_parse +#define yylex phpdbg_lex + +void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC); + +int phpdbg_lex (phpdbg_param_t* yylval); -#line 6 "sapi/phpdbg/phpdbg_lexer.h" - -#line 8 "sapi/phpdbg/phpdbg_lexer.h" - -#define YY_INT_ALIGNED short int - -/* A lexical scanner generated by flex */ - -#define FLEX_SCANNER -#define YY_FLEX_MAJOR_VERSION 2 -#define YY_FLEX_MINOR_VERSION 5 -#define YY_FLEX_SUBMINOR_VERSION 37 -#if YY_FLEX_SUBMINOR_VERSION > 0 -#define FLEX_BETA -#endif - -/* First, we deal with platform-specific or compiler-specific issues. */ - -/* begin standard C headers. */ -#include <stdio.h> -#include <string.h> -#include <errno.h> -#include <stdlib.h> - -/* end standard C headers. */ - -/* flex integer type definitions */ - -#ifndef FLEXINT_H -#define FLEXINT_H - -/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ - -#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L - -/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, - * if you want the limit (max/min) macros for int types. - */ -#ifndef __STDC_LIMIT_MACROS -#define __STDC_LIMIT_MACROS 1 -#endif - -#include <inttypes.h> -typedef int8_t flex_int8_t; -typedef uint8_t flex_uint8_t; -typedef int16_t flex_int16_t; -typedef uint16_t flex_uint16_t; -typedef int32_t flex_int32_t; -typedef uint32_t flex_uint32_t; -#else -typedef signed char flex_int8_t; -typedef short int flex_int16_t; -typedef int flex_int32_t; -typedef unsigned char flex_uint8_t; -typedef unsigned short int flex_uint16_t; -typedef unsigned int flex_uint32_t; - -/* Limits of integral types. */ -#ifndef INT8_MIN -#define INT8_MIN (-128) -#endif -#ifndef INT16_MIN -#define INT16_MIN (-32767-1) -#endif -#ifndef INT32_MIN -#define INT32_MIN (-2147483647-1) -#endif -#ifndef INT8_MAX -#define INT8_MAX (127) -#endif -#ifndef INT16_MAX -#define INT16_MAX (32767) -#endif -#ifndef INT32_MAX -#define INT32_MAX (2147483647) -#endif -#ifndef UINT8_MAX -#define UINT8_MAX (255U) -#endif -#ifndef UINT16_MAX -#define UINT16_MAX (65535U) -#endif -#ifndef UINT32_MAX -#define UINT32_MAX (4294967295U) -#endif - -#endif /* ! C99 */ - -#endif /* ! FLEXINT_H */ - -#ifdef __cplusplus - -/* The "const" storage-class-modifier is valid. */ -#define YY_USE_CONST - -#else /* ! __cplusplus */ - -/* C99 requires __STDC__ to be defined as 1. */ -#if defined (__STDC__) - -#define YY_USE_CONST - -#endif /* defined (__STDC__) */ -#endif /* ! __cplusplus */ - -#ifdef YY_USE_CONST -#define yyconst const -#else -#define yyconst -#endif - -/* An opaque pointer. */ -#ifndef YY_TYPEDEF_YY_SCANNER_T -#define YY_TYPEDEF_YY_SCANNER_T -typedef void* yyscan_t; -#endif - -/* For convenience, these vars (plus the bison vars far below) - are macros in the reentrant scanner. */ -#define yyin yyg->yyin_r -#define yyout yyg->yyout_r -#define yyextra yyg->yyextra_r -#define yyleng yyg->yyleng_r -#define yytext yyg->yytext_r -#define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) -#define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) -#define yy_flex_debug yyg->yy_flex_debug_r - -/* Size of default input buffer. */ -#ifndef YY_BUF_SIZE -#define YY_BUF_SIZE 16384 -#endif - -#ifndef YY_TYPEDEF_YY_BUFFER_STATE -#define YY_TYPEDEF_YY_BUFFER_STATE -typedef struct yy_buffer_state *YY_BUFFER_STATE; -#endif - -#ifndef YY_TYPEDEF_YY_SIZE_T -#define YY_TYPEDEF_YY_SIZE_T -typedef size_t yy_size_t; #endif - -#ifndef YY_STRUCT_YY_BUFFER_STATE -#define YY_STRUCT_YY_BUFFER_STATE -struct yy_buffer_state - { - FILE *yy_input_file; - - char *yy_ch_buf; /* input buffer */ - char *yy_buf_pos; /* current position in input buffer */ - - /* Size of input buffer in bytes, not including room for EOB - * characters. - */ - yy_size_t yy_buf_size; - - /* Number of characters read into yy_ch_buf, not including EOB - * characters. - */ - yy_size_t yy_n_chars; - - /* Whether we "own" the buffer - i.e., we know we created it, - * and can realloc() it to grow it, and should free() it to - * delete it. - */ - int yy_is_our_buffer; - - /* Whether this is an "interactive" input source; if so, and - * if we're using stdio for input, then we want to use getc() - * instead of fread(), to make sure we stop fetching input after - * each newline. - */ - int yy_is_interactive; - - /* Whether we're considered to be at the beginning of a line. - * If so, '^' rules will be active on the next match, otherwise - * not. - */ - int yy_at_bol; - - int yy_bs_lineno; /**< The line count. */ - int yy_bs_column; /**< The column count. */ - - /* Whether to try to fill the input buffer when we reach the - * end of it. - */ - int yy_fill_buffer; - - int yy_buffer_status; - - }; -#endif /* !YY_STRUCT_YY_BUFFER_STATE */ - -void yyrestart (FILE *input_file ,yyscan_t yyscanner ); -void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_create_buffer (FILE *file,int size ,yyscan_t yyscanner ); -void yy_delete_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yy_flush_buffer (YY_BUFFER_STATE b ,yyscan_t yyscanner ); -void yypush_buffer_state (YY_BUFFER_STATE new_buffer ,yyscan_t yyscanner ); -void yypop_buffer_state (yyscan_t yyscanner ); - -YY_BUFFER_STATE yy_scan_buffer (char *base,yy_size_t size ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_string (yyconst char *yy_str ,yyscan_t yyscanner ); -YY_BUFFER_STATE yy_scan_bytes (yyconst char *bytes,yy_size_t len ,yyscan_t yyscanner ); - -void *yyalloc (yy_size_t ,yyscan_t yyscanner ); -void *yyrealloc (void *,yy_size_t ,yyscan_t yyscanner ); -void yyfree (void * ,yyscan_t yyscanner ); - -/* Begin user sect3 */ - -#define yywrap(yyscanner) 1 -#define YY_SKIP_YYWRAP - -#define yytext_ptr yytext_r - -#ifdef YY_HEADER_EXPORT_START_CONDITIONS -#define INITIAL 0 -#define RAW 1 -#define NORMAL 2 - -#endif - -#ifndef YY_NO_UNISTD_H -/* Special case for "unistd.h", since it is non-ANSI. We include it way - * down here because we want the user's section 1 to have been scanned first. - * The user has a chance to override it with an option. - */ -#include <unistd.h> -#endif - -#ifndef YY_EXTRA_TYPE -#define YY_EXTRA_TYPE void * -#endif - -int yylex_init (yyscan_t* scanner); - -int yylex_init_extra (YY_EXTRA_TYPE user_defined,yyscan_t* scanner); - -/* Accessor methods to globals. - These are made visible to non-reentrant scanners for convenience. */ - -int yylex_destroy (yyscan_t yyscanner ); - -int yyget_debug (yyscan_t yyscanner ); - -void yyset_debug (int debug_flag ,yyscan_t yyscanner ); - -YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner ); - -void yyset_extra (YY_EXTRA_TYPE user_defined ,yyscan_t yyscanner ); - -FILE *yyget_in (yyscan_t yyscanner ); - -void yyset_in (FILE * in_str ,yyscan_t yyscanner ); - -FILE *yyget_out (yyscan_t yyscanner ); - -void yyset_out (FILE * out_str ,yyscan_t yyscanner ); - -yy_size_t yyget_leng (yyscan_t yyscanner ); - -char *yyget_text (yyscan_t yyscanner ); - -int yyget_lineno (yyscan_t yyscanner ); - -void yyset_lineno (int line_number ,yyscan_t yyscanner ); - -int yyget_column (yyscan_t yyscanner ); - -void yyset_column (int column_no ,yyscan_t yyscanner ); - -YYSTYPE * yyget_lval (yyscan_t yyscanner ); - -void yyset_lval (YYSTYPE * yylval_param ,yyscan_t yyscanner ); - -/* Macros after this point can all be overridden by user definitions in - * section 1. - */ - -#ifndef YY_SKIP_YYWRAP -#ifdef __cplusplus -extern "C" int yywrap (yyscan_t yyscanner ); -#else -extern int yywrap (yyscan_t yyscanner ); -#endif -#endif - -#ifndef yytext_ptr -static void yy_flex_strncpy (char *,yyconst char *,int ,yyscan_t yyscanner); -#endif - -#ifdef YY_NEED_STRLEN -static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner); -#endif - -#ifndef YY_NO_INPUT - -#endif - -/* Amount of stuff to slurp up with each read. */ -#ifndef YY_READ_BUF_SIZE -#define YY_READ_BUF_SIZE 8192 -#endif - -/* Number of entries by which start-condition stack grows. */ -#ifndef YY_START_STACK_INCR -#define YY_START_STACK_INCR 25 -#endif - -/* Default declaration of generated scanner - a define so the user can - * easily add parameters. - */ -#ifndef YY_DECL -#define YY_DECL_IS_OURS 1 - -extern int yylex \ - (YYSTYPE * yylval_param ,yyscan_t yyscanner); - -#define YY_DECL int yylex \ - (YYSTYPE * yylval_param , yyscan_t yyscanner) -#endif /* !YY_DECL */ - -/* yy_get_previous_state - get the state just before the EOB char was reached */ - -#undef YY_NEW_FILE -#undef YY_FLUSH_BUFFER -#undef yy_set_bol -#undef yy_new_buffer -#undef yy_set_interactive -#undef YY_DO_BEFORE_ACTION - -#ifdef YY_DECL_IS_OURS -#undef YY_DECL_IS_OURS -#undef YY_DECL -#endif - -#line 131 "/usr/src/php-src/sapi/phpdbg/phpdbg_lexer.l" - - -#line 347 "sapi/phpdbg/phpdbg_lexer.h" -#undef yyIN_HEADER -#endif /* yyHEADER_H */ diff --git a/sapi/phpdbg/phpdbg_lexer.l b/sapi/phpdbg/phpdbg_lexer.l index b3536feab..4d9c837f1 100644 --- a/sapi/phpdbg/phpdbg_lexer.l +++ b/sapi/phpdbg/phpdbg_lexer.l @@ -1,131 +1,169 @@ -%{ - /* * phpdbg_lexer.l */ #include "phpdbg.h" #include "phpdbg_cmd.h" -#define YYSTYPE phpdbg_param_t #include "phpdbg_parser.h" -%} - -%s RAW -%s NORMAL - -%option outfile="sapi/phpdbg/phpdbg_lexer.c" header-file="sapi/phpdbg/phpdbg_lexer.h" -%option warn nodefault - -%option reentrant noyywrap never-interactive nounistd -%option bison-bridge - -T_TRUE "true" -T_YES "yes" -T_ON "on" -T_ENABLED "enabled" -T_FALSE "false" -T_NO "no" -T_OFF "off" -T_DISABLED "disabled" -T_EVAL "ev" -T_SHELL "sh" -T_IF "if" -T_RUN "run" -T_RUN_SHORT "r" - -WS [ \r\n\t]+ -DIGITS [0-9\.]+ -ID [^ \r\n\t:#]+ -ADDR 0x[a-fA-F0-9]+ -OPCODE (ZEND_|zend_)([A-Za-z])+ -INPUT [^\n]+ -%% - -<INITIAL>{ - {T_EVAL} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_EVAL; - } - {T_SHELL} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_SHELL; - } - {T_RUN}|{T_RUN_SHORT} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_RUN; - } - - .+ { - BEGIN(NORMAL); - REJECT; - } -} - -<NORMAL>{ - {T_IF} { - BEGIN(RAW); - phpdbg_init_param(yylval, EMPTY_PARAM); - return T_IF; - } -} - -<INITIAL,NORMAL>{ - {ID}[:]{1}[//]{2} { - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_PROTO; - } - [#]{1} { return T_POUND; } - [:]{2} { return T_DCOLON; } - [:]{1} { return T_COLON; } - - {T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE} { - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 1; - return T_TRUTHY; - } - {T_NO}|{T_OFF}|{T_DISABLED}|{T_FALSE} { - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = 0; - return T_FALSY; - } - {DIGITS} { - phpdbg_init_param(yylval, NUMERIC_PARAM); - yylval->num = atoi(yytext); - return T_DIGITS; - } - {ADDR} { - phpdbg_init_param(yylval, ADDR_PARAM); - yylval->addr = strtoul(yytext, 0, 16); - return T_ADDR; - } - {OPCODE} { - phpdbg_init_param(yylval, OP_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_OPCODE; - } - {ID} { - phpdbg_init_param(yylval, STR_PARAM); - yylval->str = zend_strndup(yytext, yyleng); - yylval->len = yyleng; - return T_ID; - } -} - -<RAW>{INPUT} { +#define LEX(v) (PHPDBG_G(lexer).v) + +#define YYCTYPE unsigned char +#define YYSETCONDITION(x) LEX(state) = x; +#define YYGETCONDITION() LEX(state) +#define YYCURSOR LEX(cursor) +#define YYMARKER LEX(marker) +#define yyleng LEX(len) +#define yytext ((char*) LEX(text)) +#undef YYDEBUG +#define YYDEBUG(a, b) +#define YYFILL(n) + +#define NORMAL 0 +#define RAW 1 +#define INITIAL 2 + +ZEND_EXTERN_MODULE_GLOBALS(phpdbg); + +void phpdbg_init_lexer (phpdbg_param_t *stack, char *input TSRMLS_DC) { + PHPDBG_G(parser_stack) = stack; + + YYSETCONDITION(INITIAL); + + LEX(text) = YYCURSOR = (unsigned char *) input; + LEX(len) = strlen(input); +} + +int phpdbg_lex (phpdbg_param_t* yylval) { + TSRMLS_FETCH(); /* Slow, but this is not a major problem here. TODO: Use TSRMLS_DC */ + +restart: + LEX(text) = YYCURSOR; + +/*!re2c +re2c:yyfill:check = 0; +T_TRUE "true" +T_YES "yes" +T_ON "on" +T_ENABLED "enabled" +T_FALSE "false" +T_NO "no" +T_OFF "off" +T_DISABLED "disabled" +T_EVAL "ev" +T_SHELL "sh" +T_IF "if" +T_RUN "run" +T_RUN_SHORT "r" +WS [ \r\n\t]+ +DIGITS [0-9\.]+ +ID [^ \r\n\t:#\000]+ +ADDR [0][x][a-fA-F0-9]+ +OPCODE (ZEND_|zend_)([A-Za-z])+ +INPUT [^\n\000]+ + +<!*> := yyleng = (size_t) YYCURSOR - (size_t) yytext; + +<*>[\n\000] { + return 0; +} + +<NORMAL>{T_IF} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_IF; +} + +<NORMAL>{ID}[:]{1}[//]{2} { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_PROTO; +} +<NORMAL>[#]{1} { + return T_POUND; +} +<NORMAL>[:]{2} { + return T_DCOLON; +} +<NORMAL>[:]{1} { + return T_COLON; +} + +<NORMAL>{T_YES}|{T_ON}|{T_ENABLED}|{T_TRUE} { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 1; + return T_TRUTHY; +} + +<NORMAL>{T_NO}|{T_OFF}|{T_DISABLED}|{T_FALSE} { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = 0; + return T_FALSY; +} + +<NORMAL>{DIGITS} { + phpdbg_init_param(yylval, NUMERIC_PARAM); + yylval->num = atoi(yytext); + return T_DIGITS; +} + +<NORMAL>{ADDR} { + phpdbg_init_param(yylval, ADDR_PARAM); + yylval->addr = strtoul(yytext, 0, 16); + return T_ADDR; +} + +<NORMAL>{OPCODE} { + phpdbg_init_param(yylval, OP_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_OPCODE; +} + +<NORMAL>{ID} { + phpdbg_init_param(yylval, STR_PARAM); + yylval->str = zend_strndup(yytext, yyleng); + yylval->len = yyleng; + return T_ID; +} + +<RAW>{INPUT} { phpdbg_init_param(yylval, STR_PARAM); yylval->str = zend_strndup(yytext, yyleng); yylval->len = yyleng; - BEGIN(INITIAL); return T_INPUT; } -{WS} { /* ignore whitespace */ } -%% +<*>{WS} { + /* ignore whitespace */ + + goto restart; +} + +<INITIAL>{T_EVAL} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_EVAL; +} +<INITIAL>{T_SHELL} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_SHELL; +} +<INITIAL>{T_RUN}|{T_RUN_SHORT} { + YYSETCONDITION(RAW); + phpdbg_init_param(yylval, EMPTY_PARAM); + return T_RUN; +} + +<INITIAL>. { + YYSETCONDITION(NORMAL); + + YYCURSOR = LEX(text); + goto restart; +} + +*/ +} diff --git a/sapi/phpdbg/phpdbg_parser.c b/sapi/phpdbg/phpdbg_parser.c index 79af58f8c..f9a3e4d29 100644 --- a/sapi/phpdbg/phpdbg_parser.c +++ b/sapi/phpdbg/phpdbg_parser.c @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 2.7. */ +/* A Bison parser, made by GNU Bison 2.6.2. */ /* Bison implementation for Yacc-like parsers in C @@ -44,7 +44,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "2.7" +#define YYBISON_VERSION "2.6.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -59,11 +59,18 @@ #define YYPULL 1 - +/* Substitute the variable and function names. */ +#define yyparse phpdbg_parse +#define yylex phpdbg_lex +#define yyerror phpdbg_error +#define yylval phpdbg_lval +#define yychar phpdbg_char +#define yydebug phpdbg_debug +#define yynerrs phpdbg_nerrs /* Copy the first part of user declarations. */ -/* Line 371 of yacc.c */ -#line 2 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 336 of yacc.c */ +#line 1 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" /* @@ -84,25 +91,14 @@ #include "phpdbg_parser.h" #include "phpdbg_lexer.h" +#undef yyerror +static int yyerror(void ***tsrm_ls, const char *msg); + ZEND_EXTERN_MODULE_GLOBALS(phpdbg); -int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { - TSRMLS_FETCH(); - phpdbg_error("Parse Error: %s", msg); - { - const phpdbg_param_t *top = stack; - - while (top) { - phpdbg_param_debug( - top, "--> "); - top = top->next; - } - } - return 0; -} -/* Line 371 of yacc.c */ -#line 106 "sapi/phpdbg/phpdbg_parser.c" +/* Line 336 of yacc.c */ +#line 102 "sapi/phpdbg/phpdbg_parser.c" # ifndef YY_NULL # if defined __cplusplus && 201103L <= __cplusplus @@ -122,18 +118,18 @@ int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { /* In a future release of Bison, this section will be replaced by #include "phpdbg_parser.h". */ -#ifndef YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED -# define YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED +#ifndef PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H +# define PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG -extern int yydebug; +extern int phpdbg_debug; #endif /* "%code requires" blocks. */ -/* Line 387 of yacc.c */ -#line 40 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 350 of yacc.c */ +#line 31 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" #include "phpdbg.h" #ifndef YY_TYPEDEF_YY_SCANNER_T @@ -142,8 +138,8 @@ typedef void* yyscan_t; #endif -/* Line 387 of yacc.c */ -#line 147 "sapi/phpdbg/phpdbg_parser.c" +/* Line 350 of yacc.c */ +#line 143 "sapi/phpdbg/phpdbg_parser.c" /* Tokens. */ #ifndef YYTOKENTYPE @@ -203,24 +199,24 @@ typedef int YYSTYPE; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); +int phpdbg_parse (void *YYPARSE_PARAM); #else -int yyparse (); +int phpdbg_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus -int yyparse (phpdbg_param_t *stack, yyscan_t scanner); +int phpdbg_parse (void *tsrm_ls); #else -int yyparse (); +int phpdbg_parse (); #endif #endif /* ! YYPARSE_PARAM */ -#endif /* !YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED */ +#endif /* !PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H */ /* Copy the second part of user declarations. */ -/* Line 390 of yacc.c */ -#line 224 "sapi/phpdbg/phpdbg_parser.c" +/* Line 353 of yacc.c */ +#line 220 "sapi/phpdbg/phpdbg_parser.c" #ifdef short # undef short @@ -273,24 +269,24 @@ typedef short int yytype_int16; # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ -# define YY_(Msgid) dgettext ("bison-runtime", Msgid) +# define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ -# define YY_(Msgid) Msgid +# define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) +# define YYUSE(e) ((void) (e)) #else -# define YYUSE(E) /* empty */ +# define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint -# define YYID(N) (N) +# define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) @@ -438,18 +434,18 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 24 +#define YYFINAL 25 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 33 +#define YYLAST 41 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 21 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 4 +#define YYNNTS 5 /* YYNRULES -- Number of rules. */ -#define YYNRULES 24 +#define YYNRULES 25 /* YYNRULES -- Number of states. */ -#define YYNSTATES 37 +#define YYNSTATES 38 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 @@ -496,30 +492,30 @@ static const yytype_uint8 yytranslate[] = YYRHS. */ static const yytype_uint8 yyprhs[] = { - 0, 0, 3, 5, 6, 8, 11, 15, 20, 25, - 31, 35, 41, 45, 48, 51, 54, 56, 59, 61, - 63, 65, 67, 69, 71 + 0, 0, 3, 5, 7, 8, 10, 13, 17, 22, + 27, 33, 37, 43, 47, 49, 51, 53, 55, 57, + 59, 61, 64, 67, 70, 72 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { - 22, 0, -1, 23, -1, -1, 24, -1, 23, 24, - -1, 18, 10, 14, -1, 18, 10, 12, 14, -1, - 13, 18, 10, 14, -1, 13, 18, 10, 12, 14, - -1, 18, 11, 18, -1, 18, 11, 18, 12, 14, - -1, 18, 12, 14, -1, 6, 19, -1, 3, 19, - -1, 5, 19, -1, 4, -1, 4, 19, -1, 17, - -1, 16, -1, 15, -1, 7, -1, 8, -1, 14, - -1, 18, -1 + 22, 0, -1, 23, -1, 25, -1, -1, 24, -1, + 23, 24, -1, 18, 10, 14, -1, 18, 10, 12, + 14, -1, 13, 18, 10, 14, -1, 13, 18, 10, + 12, 14, -1, 18, 11, 18, -1, 18, 11, 18, + 12, 14, -1, 18, 12, 14, -1, 17, -1, 16, + -1, 15, -1, 7, -1, 8, -1, 14, -1, 18, + -1, 6, 19, -1, 3, 19, -1, 5, 19, -1, + 4, -1, 4, 19, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { - 0, 76, 76, 77, 81, 82, 86, 91, 96, 107, - 118, 123, 129, 135, 140, 145, 150, 154, 159, 160, - 161, 162, 163, 164, 165 + 0, 66, 66, 67, 68, 72, 73, 77, 82, 87, + 97, 107, 112, 118, 124, 125, 126, 127, 128, 129, + 130, 134, 139, 144, 149, 153 }; #endif @@ -536,7 +532,7 @@ static const char *const yytname[] = "\"digits (numbers)\"", "\"literal (string)\"", "\"address\"", "\"opcode\"", "\"identifier (command or function name)\"", "\"input (input string or data)\"", "\"input\"", "$accept", "input", - "parameters", "parameter", YY_NULL + "parameters", "parameter", "full_expression", YY_NULL }; #endif @@ -554,17 +550,17 @@ static const yytype_uint16 yytoknum[] = /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 21, 22, 22, 23, 23, 24, 24, 24, 24, + 0, 21, 22, 22, 22, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24 + 24, 25, 25, 25, 25, 25 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { - 0, 2, 1, 0, 1, 2, 3, 4, 4, 5, - 3, 5, 3, 2, 2, 2, 1, 2, 1, 1, - 1, 1, 1, 1, 1 + 0, 2, 1, 1, 0, 1, 2, 3, 4, 4, + 5, 3, 5, 3, 1, 1, 1, 1, 1, 1, + 1, 2, 2, 2, 1, 2 }; /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. @@ -572,16 +568,16 @@ static const yytype_uint8 yyr2[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 3, 0, 16, 0, 0, 21, 22, 0, 23, 20, - 19, 18, 24, 0, 2, 4, 14, 17, 15, 13, - 0, 0, 0, 0, 1, 5, 0, 0, 6, 10, - 12, 0, 8, 7, 0, 9, 11 + 4, 0, 24, 0, 0, 17, 18, 0, 19, 16, + 15, 14, 20, 0, 2, 5, 3, 22, 25, 23, + 21, 0, 0, 0, 0, 1, 6, 0, 0, 7, + 11, 13, 0, 9, 8, 0, 10, 12 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { - -1, 13, 14, 15 + -1, 13, 14, 15, 16 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing @@ -589,16 +585,16 @@ static const yytype_int8 yydefgoto[] = #define YYPACT_NINF -11 static const yytype_int8 yypact[] = { - -3, -10, 1, 2, 3, -11, -11, 6, -11, -11, - -11, -11, -4, 23, -3, -11, -11, -11, -11, -11, - 15, 4, 8, 13, -11, -11, 5, 14, -11, 17, - -11, 16, -11, -11, 18, -11, -11 + -3, -10, 10, 11, 12, -11, -11, 14, -11, -11, + -11, -11, -4, 28, 9, -11, -11, -11, -11, -11, + -11, 23, 6, 16, 21, -11, -11, 7, 22, -11, + 25, -11, 24, -11, -11, 26, -11, -11 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { - -11, -11, -11, 19 + -11, -11, -11, 27, -11 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If @@ -607,24 +603,26 @@ static const yytype_int8 yypgoto[] = #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { - 1, 2, 3, 4, 5, 6, 21, 22, 23, 16, - 7, 8, 9, 10, 11, 12, 27, 31, 28, 32, - 17, 18, 19, 24, 20, 26, 29, 30, 33, 34, - 35, 0, 36, 25 + 1, 2, 3, 4, 5, 6, 22, 23, 24, 17, + 7, 8, 9, 10, 11, 12, 5, 6, 28, 32, + 29, 33, 7, 8, 9, 10, 11, 12, 25, 18, + 19, 20, 21, 27, 30, 31, 34, 35, 36, 0, + 37, 26 }; -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-11))) +#define yypact_value_is_default(yystate) \ + ((yystate) == (-11)) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(yytable_value) \ YYID (0) static const yytype_int8 yycheck[] = { 3, 4, 5, 6, 7, 8, 10, 11, 12, 19, - 13, 14, 15, 16, 17, 18, 12, 12, 14, 14, - 19, 19, 19, 0, 18, 10, 18, 14, 14, 12, - 14, -1, 14, 14 + 13, 14, 15, 16, 17, 18, 7, 8, 12, 12, + 14, 14, 13, 14, 15, 16, 17, 18, 0, 19, + 19, 19, 18, 10, 18, 14, 14, 12, 14, -1, + 14, 14 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -632,9 +630,9 @@ static const yytype_int8 yycheck[] = static const yytype_uint8 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 13, 14, 15, - 16, 17, 18, 22, 23, 24, 19, 19, 19, 19, - 18, 10, 11, 12, 0, 24, 10, 12, 14, 18, - 14, 12, 14, 14, 12, 14, 14 + 16, 17, 18, 22, 23, 24, 25, 19, 19, 19, + 19, 18, 10, 11, 12, 0, 24, 10, 12, 14, + 18, 14, 12, 14, 14, 12, 14, 14 }; #define yyerrok (yyerrstatus = 0) @@ -676,27 +674,56 @@ do \ } \ else \ { \ - yyerror (stack, scanner, YY_("syntax error: cannot back up")); \ + yyerror (tsrm_ls, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) -/* Error token number */ + #define YYTERROR 1 #define YYERRCODE 256 +/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. + If N is 0, then set CURRENT to the empty location which ends + the previous symbol: RHS[0] (always defined). */ + +#ifndef YYLLOC_DEFAULT +# define YYLLOC_DEFAULT(Current, Rhs, N) \ + do \ + if (YYID (N)) \ + { \ + (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ + (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ + (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ + (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ + } \ + else \ + { \ + (Current).first_line = (Current).last_line = \ + YYRHSLOC (Rhs, 0).last_line; \ + (Current).first_column = (Current).last_column = \ + YYRHSLOC (Rhs, 0).last_column; \ + } \ + while (YYID (0)) +#endif + +#define YYRHSLOC(Rhs, K) ((Rhs)[K]) + + /* This macro is provided for backward compatibility. */ + #ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) #endif /* YYLEX -- calling `yylex' with the right arguments. */ + #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else -# define YYLEX yylex (&yylval, scanner) +# define YYLEX yylex (&yylval) #endif /* Enable debugging if requested. */ @@ -719,7 +746,7 @@ do { \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value, stack, scanner); \ + Type, Value, tsrm_ls); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) @@ -733,23 +760,21 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, phpdbg_param_t *stack, yyscan_t scanner) +yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *tsrm_ls) #else static void -yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner) +yy_symbol_value_print (yyoutput, yytype, yyvaluep, tsrm_ls) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; - phpdbg_param_t *stack; - yyscan_t scanner; + void *tsrm_ls; #endif { FILE *yyo = yyoutput; YYUSE (yyo); if (!yyvaluep) return; - YYUSE (stack); - YYUSE (scanner); + YYUSE (tsrm_ls); # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); @@ -759,7 +784,7 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner) switch (yytype) { default: - break; + break; } } @@ -771,15 +796,14 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, phpdbg_param_t *stack, yyscan_t scanner) +yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, void *tsrm_ls) #else static void -yy_symbol_print (yyoutput, yytype, yyvaluep, stack, scanner) +yy_symbol_print (yyoutput, yytype, yyvaluep, tsrm_ls) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; - phpdbg_param_t *stack; - yyscan_t scanner; + void *tsrm_ls; #endif { if (yytype < YYNTOKENS) @@ -787,7 +811,7 @@ yy_symbol_print (yyoutput, yytype, yyvaluep, stack, scanner) else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, stack, scanner); + yy_symbol_value_print (yyoutput, yytype, yyvaluep, tsrm_ls); YYFPRINTF (yyoutput, ")"); } @@ -830,14 +854,13 @@ do { \ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yy_reduce_print (YYSTYPE *yyvsp, int yyrule, phpdbg_param_t *stack, yyscan_t scanner) +yy_reduce_print (YYSTYPE *yyvsp, int yyrule, void *tsrm_ls) #else static void -yy_reduce_print (yyvsp, yyrule, stack, scanner) +yy_reduce_print (yyvsp, yyrule, tsrm_ls) YYSTYPE *yyvsp; int yyrule; - phpdbg_param_t *stack; - yyscan_t scanner; + void *tsrm_ls; #endif { int yynrhs = yyr2[yyrule]; @@ -851,7 +874,7 @@ yy_reduce_print (yyvsp, yyrule, stack, scanner) YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) - , stack, scanner); + , tsrm_ls); YYFPRINTF (stderr, "\n"); } } @@ -859,7 +882,7 @@ yy_reduce_print (yyvsp, yyrule, stack, scanner) # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ - yy_reduce_print (yyvsp, Rule, stack, scanner); \ + yy_reduce_print (yyvsp, Rule, tsrm_ls); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that @@ -1005,6 +1028,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, { YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); YYSIZE_T yysize = yysize0; + YYSIZE_T yysize1; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULL; @@ -1067,13 +1091,11 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, break; } yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } + yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); + if (! (yysize <= yysize1 + && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; } } } @@ -1093,12 +1115,10 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, # undef YYCASE_ } - { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } + yysize1 = yysize + yystrlen (yyformat); + if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) + return 2; + yysize = yysize1; if (*yymsg_alloc < yysize) { @@ -1139,20 +1159,18 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, phpdbg_param_t *stack, yyscan_t scanner) +yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, void *tsrm_ls) #else static void -yydestruct (yymsg, yytype, yyvaluep, stack, scanner) +yydestruct (yymsg, yytype, yyvaluep, tsrm_ls) const char *yymsg; int yytype; YYSTYPE *yyvaluep; - phpdbg_param_t *stack; - yyscan_t scanner; + void *tsrm_ls; #endif { YYUSE (yyvaluep); - YYUSE (stack); - YYUSE (scanner); + YYUSE (tsrm_ls); if (!yymsg) yymsg = "Deleting"; @@ -1162,7 +1180,7 @@ yydestruct (yymsg, yytype, yyvaluep, stack, scanner) { default: - break; + break; } } @@ -1187,43 +1205,19 @@ yyparse (YYPARSE_PARAM) #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int -yyparse (phpdbg_param_t *stack, yyscan_t scanner) +yyparse (void *tsrm_ls) #else int -yyparse (stack, scanner) - phpdbg_param_t *stack; - yyscan_t scanner; +yyparse (tsrm_ls) + void *tsrm_ls; #endif #endif { /* The lookahead symbol. */ int yychar; - -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ -/* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ - _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ - _Pragma ("GCC diagnostic pop") -#else -/* Default value used for initialization, for pacifying older GCCs - or non-GCC compilers. */ -static YYSTYPE yyval_default; -# define YY_INITIAL_VALUE(Value) = Value -#endif -#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN -# define YY_IGNORE_MAYBE_UNINITIALIZED_END -#endif -#ifndef YY_INITIAL_VALUE -# define YY_INITIAL_VALUE(Value) /* Nothing. */ -#endif - /* The semantic value of the lookahead symbol. */ -YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); +YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; @@ -1254,7 +1248,7 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); int yyn; int yyresult; /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; + int yytoken; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; @@ -1272,8 +1266,9 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); Keep to zero when no symbol should be popped. */ int yylen = 0; - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; + yytoken = 0; + yyss = yyssa; + yyvs = yyvsa; yystacksize = YYINITDEPTH; YYDPRINTF ((stderr, "Starting parse\n")); @@ -1282,6 +1277,13 @@ YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ + + /* Initialize stack pointers. + Waste one element of value and location stack + so that they stay on the same level as the state stack. + The wasted elements are never initialized. */ + yyssp = yyss; + yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. @@ -1422,9 +1424,7 @@ yybackup: yychar = YYEMPTY; yystate = yyn; - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END goto yynewstate; @@ -1460,21 +1460,27 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 4: -/* Line 1792 of yacc.c */ -#line 81 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(stack, &(yyvsp[(1) - (1)])); } + case 3: +/* Line 1802 of yacc.c */ +#line 67 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } break; case 5: -/* Line 1792 of yacc.c */ -#line 82 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { phpdbg_stack_push(stack, &(yyvsp[(2) - (2)])); } +/* Line 1802 of yacc.c */ +#line 72 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(1) - (1)])); } break; case 6: -/* Line 1792 of yacc.c */ -#line 86 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 73 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { phpdbg_stack_push(PHPDBG_G(parser_stack), &(yyvsp[(2) - (2)])); } + break; + + case 7: +/* Line 1802 of yacc.c */ +#line 77 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; (yyval).file.name = (yyvsp[(2) - (3)]).str; @@ -1482,9 +1488,9 @@ yyreduce: } break; - case 7: -/* Line 1792 of yacc.c */ -#line 91 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 8: +/* Line 1802 of yacc.c */ +#line 82 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; (yyval).file.name = (yyvsp[(1) - (4)]).str; @@ -1492,13 +1498,12 @@ yyreduce: } break; - case 8: -/* Line 1792 of yacc.c */ -#line 96 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 9: +/* Line 1802 of yacc.c */ +#line 87 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = FILE_PARAM; - (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + - (yyvsp[(2) - (4)]).len + 1); + (yyval).file.name = malloc((yyvsp[(1) - (4)]).len + (yyvsp[(2) - (4)]).len + 1); if ((yyval).file.name) { memcpy(&(yyval).file.name[0], (yyvsp[(1) - (4)]).str, (yyvsp[(1) - (4)]).len); memcpy(&(yyval).file.name[(yyvsp[(1) - (4)]).len], (yyvsp[(2) - (4)]).str, (yyvsp[(2) - (4)]).len); @@ -1508,13 +1513,12 @@ yyreduce: } break; - case 9: -/* Line 1792 of yacc.c */ -#line 107 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 10: +/* Line 1802 of yacc.c */ +#line 97 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FILE_PARAM; - (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + - (yyvsp[(2) - (5)]).len + 1); + (yyval).file.name = malloc((yyvsp[(1) - (5)]).len + (yyvsp[(2) - (5)]).len + 1); if ((yyval).file.name) { memcpy(&(yyval).file.name[0], (yyvsp[(1) - (5)]).str, (yyvsp[(1) - (5)]).len); memcpy(&(yyval).file.name[(yyvsp[(1) - (5)]).len], (yyvsp[(2) - (5)]).str, (yyvsp[(2) - (5)]).len); @@ -1524,9 +1528,9 @@ yyreduce: } break; - case 10: -/* Line 1792 of yacc.c */ -#line 118 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 11: +/* Line 1802 of yacc.c */ +#line 107 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (3)]).str; @@ -1534,9 +1538,9 @@ yyreduce: } break; - case 11: -/* Line 1792 of yacc.c */ -#line 123 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 12: +/* Line 1802 of yacc.c */ +#line 112 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_METHOD_PARAM; (yyval).method.class = (yyvsp[(1) - (5)]).str; @@ -1545,9 +1549,9 @@ yyreduce: } break; - case 12: -/* Line 1792 of yacc.c */ -#line 129 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" + case 13: +/* Line 1802 of yacc.c */ +#line 118 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval).type = NUMERIC_FUNCTION_PARAM; (yyval).str = (yyvsp[(1) - (3)]).str; @@ -1556,100 +1560,100 @@ yyreduce: } break; - case 13: -/* Line 1792 of yacc.c */ -#line 135 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { - (yyval).type = COND_PARAM; - (yyval).str = (yyvsp[(2) - (2)]).str; - (yyval).len = (yyvsp[(2) - (2)]).len; - } - break; - case 14: -/* Line 1792 of yacc.c */ -#line 140 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { - (yyval).type = EVAL_PARAM; - (yyval).str = (yyvsp[(2) - (2)]).str; - (yyval).len = (yyvsp[(2) - (2)]).len; - } +/* Line 1802 of yacc.c */ +#line 124 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } break; case 15: -/* Line 1792 of yacc.c */ -#line 145 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { - (yyval).type = SHELL_PARAM; - (yyval).str = (yyvsp[(2) - (2)]).str; - (yyval).len = (yyvsp[(2) - (2)]).len; - } +/* Line 1802 of yacc.c */ +#line 125 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } break; case 16: -/* Line 1792 of yacc.c */ -#line 150 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { - (yyval).type = RUN_PARAM; - (yyval).len = 0; - } +/* Line 1802 of yacc.c */ +#line 126 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } break; case 17: -/* Line 1792 of yacc.c */ -#line 154 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { - (yyval).type = RUN_PARAM; - (yyval).str = (yyvsp[(2) - (2)]).str; - (yyval).len = (yyvsp[(2) - (2)]).len; - } +/* Line 1802 of yacc.c */ +#line 127 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { (yyval) = (yyvsp[(1) - (1)]); } break; case 18: -/* Line 1792 of yacc.c */ -#line 159 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 128 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 19: -/* Line 1792 of yacc.c */ -#line 160 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 129 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 20: -/* Line 1792 of yacc.c */ -#line 161 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 1802 of yacc.c */ +#line 130 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" { (yyval) = (yyvsp[(1) - (1)]); } break; case 21: -/* Line 1792 of yacc.c */ -#line 162 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } +/* Line 1802 of yacc.c */ +#line 134 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { + (yyval).type = COND_PARAM; + (yyval).str = (yyvsp[(2) - (2)]).str; + (yyval).len = (yyvsp[(2) - (2)]).len; + } break; case 22: -/* Line 1792 of yacc.c */ -#line 163 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } +/* Line 1802 of yacc.c */ +#line 139 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { + (yyval).type = EVAL_PARAM; + (yyval).str = (yyvsp[(2) - (2)]).str; + (yyval).len = (yyvsp[(2) - (2)]).len; + } break; case 23: -/* Line 1792 of yacc.c */ -#line 164 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } +/* Line 1802 of yacc.c */ +#line 144 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { + (yyval).type = SHELL_PARAM; + (yyval).str = (yyvsp[(2) - (2)]).str; + (yyval).len = (yyvsp[(2) - (2)]).len; + } break; case 24: -/* Line 1792 of yacc.c */ -#line 165 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" - { (yyval) = (yyvsp[(1) - (1)]); } +/* Line 1802 of yacc.c */ +#line 149 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { + (yyval).type = RUN_PARAM; + (yyval).len = 0; + } break; + case 25: +/* Line 1802 of yacc.c */ +#line 153 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + { + (yyval).type = RUN_PARAM; + (yyval).str = (yyvsp[(2) - (2)]).str; + (yyval).len = (yyvsp[(2) - (2)]).len; + } + break; -/* Line 1792 of yacc.c */ -#line 1653 "sapi/phpdbg/phpdbg_parser.c" + +/* Line 1802 of yacc.c */ +#line 1657 "sapi/phpdbg/phpdbg_parser.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -1699,7 +1703,7 @@ yyerrlab: { ++yynerrs; #if ! YYERROR_VERBOSE - yyerror (stack, scanner, YY_("syntax error")); + yyerror (tsrm_ls, YY_("syntax error")); #else # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ yyssp, yytoken) @@ -1726,7 +1730,7 @@ yyerrlab: yymsgp = yymsg; } } - yyerror (stack, scanner, yymsgp); + yyerror (tsrm_ls, yymsgp); if (yysyntax_error_status == 2) goto yyexhaustedlab; } @@ -1750,7 +1754,7 @@ yyerrlab: else { yydestruct ("Error: discarding", - yytoken, &yylval, stack, scanner); + yytoken, &yylval, tsrm_ls); yychar = YYEMPTY; } } @@ -1806,15 +1810,13 @@ yyerrlab1: yydestruct ("Error: popping", - yystos[yystate], yyvsp, stack, scanner); + yystos[yystate], yyvsp, tsrm_ls); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } - YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; - YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ @@ -1843,7 +1845,7 @@ yyabortlab: | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: - yyerror (stack, scanner, YY_("memory exhausted")); + yyerror (tsrm_ls, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif @@ -1855,7 +1857,7 @@ yyreturn: user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", - yytoken, &yylval, stack, scanner); + yytoken, &yylval, tsrm_ls); } /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ @@ -1864,7 +1866,7 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, stack, scanner); + yystos[*yyssp], yyvsp, tsrm_ls); YYPOPSTACK (1); } #ifndef yyoverflow @@ -1880,6 +1882,30 @@ yyreturn: } -/* Line 2055 of yacc.c */ -#line 168 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 2048 of yacc.c */ +#line 160 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" + +static int yyerror(void ***tsrm_ls, const char *msg) { + phpdbg_error("Parse Error: %s", msg); + + { + const phpdbg_param_t *top = PHPDBG_G(parser_stack); + + while (top) { + phpdbg_param_debug(top, "--> "); + top = top->next; + } + } + return 0; +} + +int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC) { + phpdbg_init_lexer(stack, input TSRMLS_CC); + +#ifdef ZTS + return yyparse(TSRMLS_C); +#else + return yyparse(NULL); +#endif +} diff --git a/sapi/phpdbg/phpdbg_parser.h b/sapi/phpdbg/phpdbg_parser.h index 6acb8963c..b3aadb9c6 100644 --- a/sapi/phpdbg/phpdbg_parser.h +++ b/sapi/phpdbg/phpdbg_parser.h @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 2.7. */ +/* A Bison parser, made by GNU Bison 2.6.2. */ /* Bison interface for Yacc-like parsers in C @@ -30,18 +30,18 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED -# define YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED +#ifndef PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H +# define PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG -extern int yydebug; +extern int phpdbg_debug; #endif /* "%code requires" blocks. */ -/* Line 2058 of yacc.c */ -#line 40 "/usr/src/php-src/sapi/phpdbg/phpdbg_parser.y" +/* Line 2055 of yacc.c */ +#line 31 "/var/root/php-src/sapi/phpdbg/phpdbg_parser.y" #include "phpdbg.h" #ifndef YY_TYPEDEF_YY_SCANNER_T @@ -50,7 +50,7 @@ typedef void* yyscan_t; #endif -/* Line 2058 of yacc.c */ +/* Line 2055 of yacc.c */ #line 55 "sapi/phpdbg/phpdbg_parser.h" /* Tokens. */ @@ -111,16 +111,16 @@ typedef int YYSTYPE; #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus -int yyparse (void *YYPARSE_PARAM); +int phpdbg_parse (void *YYPARSE_PARAM); #else -int yyparse (); +int phpdbg_parse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus -int yyparse (phpdbg_param_t *stack, yyscan_t scanner); +int phpdbg_parse (void *tsrm_ls); #else -int yyparse (); +int phpdbg_parse (); #endif #endif /* ! YYPARSE_PARAM */ -#endif /* !YY_YY_SAPI_PHPDBG_PHPDBG_PARSER_H_INCLUDED */ +#endif /* !PHPDBG_SAPI_PHPDBG_PHPDBG_PARSER_H */ diff --git a/sapi/phpdbg/phpdbg_parser.y b/sapi/phpdbg/phpdbg_parser.y index 4a84504e2..fd81edfc2 100644 --- a/sapi/phpdbg/phpdbg_parser.y +++ b/sapi/phpdbg/phpdbg_parser.y @@ -1,4 +1,3 @@ -%error-verbose %{ /* @@ -19,23 +18,15 @@ #include "phpdbg_parser.h" #include "phpdbg_lexer.h" +#undef yyerror +static int yyerror(void ***tsrm_ls, const char *msg); + ZEND_EXTERN_MODULE_GLOBALS(phpdbg); -int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { - TSRMLS_FETCH(); - phpdbg_error("Parse Error: %s", msg); - { - const phpdbg_param_t *top = stack; - - while (top) { - phpdbg_param_debug( - top, "--> "); - top = top->next; - } - } - return 0; -} %} + +%pure-parser +%error-verbose %code requires { #include "phpdbg.h" @@ -44,59 +35,58 @@ int yyerror(phpdbg_param_t *stack, yyscan_t scanner, const char *msg) { typedef void* yyscan_t; #endif } + +%parse-param { void *tsrm_ls } + %output "sapi/phpdbg/phpdbg_parser.c" %defines "sapi/phpdbg/phpdbg_parser.h" - -%define api.pure -%lex-param { yyscan_t scanner } -%parse-param { phpdbg_param_t *stack } -%parse-param { yyscan_t scanner } - -%token T_EVAL "eval" -%token T_RUN "run" -%token T_SHELL "shell" -%token T_IF "if (condition)" -%token T_TRUTHY "truthy (true, on, yes or enabled)" -%token T_FALSY "falsy (false, off, no or disabled)" -%token T_STRING "string (some input, perhaps)" -%token T_COLON ": (colon)" -%token T_DCOLON ":: (double colon)" -%token T_POUND "# (pound sign)" -%token T_PROTO "protocol (file://)" -%token T_DIGITS "digits (numbers)" -%token T_LITERAL "literal (string)" -%token T_ADDR "address" -%token T_OPCODE "opcode" -%token T_ID "identifier (command or function name)" -%token T_INPUT "input (input string or data)" -%token T_UNEXPECTED "input" -%% + +%token T_EVAL "eval" +%token T_RUN "run" +%token T_SHELL "shell" +%token T_IF "if (condition)" +%token T_TRUTHY "truthy (true, on, yes or enabled)" +%token T_FALSY "falsy (false, off, no or disabled)" +%token T_STRING "string (some input, perhaps)" +%token T_COLON ": (colon)" +%token T_DCOLON ":: (double colon)" +%token T_POUND "# (pound sign)" +%token T_PROTO "protocol (file://)" +%token T_DIGITS "digits (numbers)" +%token T_LITERAL "literal (string)" +%token T_ADDR "address" +%token T_OPCODE "opcode" +%token T_ID "identifier (command or function name)" +%token T_INPUT "input (input string or data)" +%token T_UNEXPECTED "input" + +%% /* Rules */ input - : parameters - | /* nothing */ - ; + : parameters + | full_expression { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); } + | /* nothing */ + ; parameters - : parameter { phpdbg_stack_push(stack, &$1); } - | parameters parameter { phpdbg_stack_push(stack, &$2); } + : parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$1); } + | parameters parameter { phpdbg_stack_push(PHPDBG_G(parser_stack), &$2); } ; parameter - : T_ID T_COLON T_DIGITS { + : T_ID T_COLON T_DIGITS { $$.type = FILE_PARAM; $$.file.name = $2.str; $$.file.line = $3.num; } - | T_ID T_COLON T_POUND T_DIGITS { + | T_ID T_COLON T_POUND T_DIGITS { $$.type = NUMERIC_FILE_PARAM; $$.file.name = $1.str; $$.file.line = $4.num; } - | T_PROTO T_ID T_COLON T_DIGITS { + | T_PROTO T_ID T_COLON T_DIGITS { $$.type = FILE_PARAM; - $$.file.name = malloc($1.len + - $2.len + 1); + $$.file.name = malloc($1.len + $2.len + 1); if ($$.file.name) { memcpy(&$$.file.name[0], $1.str, $1.len); memcpy(&$$.file.name[$1.len], $2.str, $2.len); @@ -104,10 +94,9 @@ parameter } $$.file.line = $4.num; } - | T_PROTO T_ID T_COLON T_POUND T_DIGITS { + | T_PROTO T_ID T_COLON T_POUND T_DIGITS { $$.type = NUMERIC_FILE_PARAM; - $$.file.name = malloc($1.len + - $2.len + 1); + $$.file.name = malloc($1.len + $2.len + 1); if ($$.file.name) { memcpy(&$$.file.name[0], $1.str, $1.len); memcpy(&$$.file.name[$1.len], $2.str, $2.len); @@ -115,54 +104,81 @@ parameter } $$.file.line = $5.num; } - | T_ID T_DCOLON T_ID { + | T_ID T_DCOLON T_ID { $$.type = METHOD_PARAM; $$.method.class = $1.str; $$.method.name = $3.str; } - | T_ID T_DCOLON T_ID T_POUND T_DIGITS { + | T_ID T_DCOLON T_ID T_POUND T_DIGITS { $$.type = NUMERIC_METHOD_PARAM; $$.method.class = $1.str; $$.method.name = $3.str; $$.num = $5.num; } - | T_ID T_POUND T_DIGITS { + | T_ID T_POUND T_DIGITS { $$.type = NUMERIC_FUNCTION_PARAM; $$.str = $1.str; $$.len = $1.len; $$.num = $3.num; } - | T_IF T_INPUT { + | T_OPCODE { $$ = $1; } + | T_ADDR { $$ = $1; } + | T_LITERAL { $$ = $1; } + | T_TRUTHY { $$ = $1; } + | T_FALSY { $$ = $1; } + | T_DIGITS { $$ = $1; } + | T_ID { $$ = $1; } + ; + +full_expression + : T_IF T_INPUT { $$.type = COND_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_EVAL T_INPUT { + | T_EVAL T_INPUT { $$.type = EVAL_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_SHELL T_INPUT { + | T_SHELL T_INPUT { $$.type = SHELL_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_RUN { + | T_RUN { $$.type = RUN_PARAM; $$.len = 0; } - | T_RUN T_INPUT { + | T_RUN T_INPUT { $$.type = RUN_PARAM; $$.str = $2.str; $$.len = $2.len; } - | T_OPCODE { $$ = $1; } - | T_ADDR { $$ = $1; } - | T_LITERAL { $$ = $1; } - | T_TRUTHY { $$ = $1; } - | T_FALSY { $$ = $1; } - | T_DIGITS { $$ = $1; } - | T_ID { $$ = $1; } ; %% + +static int yyerror(void ***tsrm_ls, const char *msg) { + phpdbg_error("Parse Error: %s", msg); + + { + const phpdbg_param_t *top = PHPDBG_G(parser_stack); + + while (top) { + phpdbg_param_debug(top, "--> "); + top = top->next; + } + } + return 0; +} + +int phpdbg_do_parse(phpdbg_param_t *stack, char *input TSRMLS_DC) { + phpdbg_init_lexer(stack, input TSRMLS_CC); + +#ifdef ZTS + return yyparse(TSRMLS_C); +#else + return yyparse(NULL); +#endif +} diff --git a/sapi/phpdbg/phpdbg_prompt.c b/sapi/phpdbg/phpdbg_prompt.c index 7a28a7512..5379e7758 100644 --- a/sapi/phpdbg/phpdbg_prompt.c +++ b/sapi/phpdbg/phpdbg_prompt.c @@ -38,8 +38,6 @@ #include "phpdbg_lexer.h" #include "phpdbg_parser.h" -int yyparse(phpdbg_param_t *stack, yyscan_t scanner); - /* {{{ command declarations */ const phpdbg_command_t phpdbg_prompt_commands[] = { PHPDBG_COMMAND_D(exec, "set execution context", 'e', NULL, "s"), @@ -248,20 +246,10 @@ void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_ char *why = NULL; char *input = phpdbg_read_input(cmd TSRMLS_CC); phpdbg_param_t stack; - yyscan_t scanner; - YY_BUFFER_STATE state; phpdbg_init_param(&stack, STACK_PARAM); - - if (yylex_init(&scanner)) { - phpdbg_error( - "could not initialize scanner"); - break; - } - state = yy_scan_string(input, scanner); - - if (yyparse(&stack, scanner) <= 0) { + if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) { switch (phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: // if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { @@ -274,15 +262,12 @@ void phpdbg_try_file_init(char *init_file, size_t init_file_len, zend_bool free_ break; } } - + if (why) { free(why); why = NULL; } - - yy_delete_buffer(state, scanner); - yylex_destroy(scanner); - + phpdbg_stack_free(&stack); phpdbg_destroy_input(&input TSRMLS_CC); } @@ -1014,20 +999,9 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ if (input) { do { - yyscan_t scanner; - YY_BUFFER_STATE state; - phpdbg_init_param(&stack, STACK_PARAM); - if (yylex_init(&scanner)) { - phpdbg_error( - "could not initialize scanner"); - return FAILURE; - } - - state = yy_scan_string(input, scanner); - - if (yyparse(&stack, scanner) <= 0) { + if (phpdbg_do_parse(&stack, input TSRMLS_CC) <= 0) { switch (ret = phpdbg_stack_execute(&stack, &why TSRMLS_CC)) { case FAILURE: if (!(PHPDBG_G(flags) & PHPDBG_IS_QUITTING)) { @@ -1061,9 +1035,6 @@ int phpdbg_interactive(TSRMLS_D) /* {{{ */ why = NULL; } - yy_delete_buffer(state, scanner); - yylex_destroy(scanner); - phpdbg_stack_free(&stack); phpdbg_destroy_input(&input TSRMLS_CC); diff --git a/sapi/phpdbg/phpdbg_utils.c b/sapi/phpdbg/phpdbg_utils.c index c9b22a203..98748b202 100644 --- a/sapi/phpdbg/phpdbg_utils.c +++ b/sapi/phpdbg/phpdbg_utils.c @@ -32,6 +32,9 @@ # include "win32/time.h" #elif defined(HAVE_SYS_IOCTL_H) # include "sys/ioctl.h" +# ifndef GWINSZ_IN_SYS_IOCTL +# include <termios.h> +# endif #endif ZEND_EXTERN_MODULE_GLOBALS(phpdbg); @@ -437,12 +440,12 @@ PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D) /* {{{ */ GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi); columns = csbi.srWindow.Right - csbi.srWindow.Left + 1; -#elif defined(HAVE_SYS_IOCTL_H) +#elif defined(HAVE_SYS_IOCTL_H) && defined (TIOCGWINSZ) struct winsize w; - columns = ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 100; + columns = ioctl(fileno(stdout), TIOCGWINSZ, &w) == 0 ? w.ws_col : 80; #else - columns = 100; + columns = 80; #endif return columns; } /* }}} */ diff --git a/sapi/phpdbg/phpdbg_utils.h b/sapi/phpdbg/phpdbg_utils.h index 68ae7e44a..56bacfc45 100644 --- a/sapi/phpdbg/phpdbg_utils.h +++ b/sapi/phpdbg/phpdbg_utils.h @@ -124,4 +124,24 @@ PHPDBG_API int phpdbg_get_terminal_width(TSRMLS_D); /* }}} */ int phpdbg_rebuild_symtable(TSRMLS_D); +#if PHP_VERSION_ID < 50500 +/* copy from zend_hash.c PHP 5.5 for 5.4 compatibility */ +static void zend_hash_get_current_key_zval_ex(const HashTable *ht, zval *key, HashPosition *pos) { + Bucket *p; + + p = pos ? (*pos) : ht->pInternalPointer; + + if (!p) { + 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_STRLEN_P(key) = p->nKeyLength - 1; + } else { + Z_TYPE_P(key) = IS_LONG; + Z_LVAL_P(key) = p->h; + } +} +#endif + #endif /* PHPDBG_UTILS_H */ diff --git a/sapi/phpdbg/tests/run-tests.php b/sapi/phpdbg/tests/run-tests.php index 47a998cca..1cc31d815 100644 --- a/sapi/phpdbg/tests/run-tests.php +++ b/sapi/phpdbg/tests/run-tests.php @@ -135,8 +135,8 @@ namespace phpdbg\testing { * @param array basic configuration * @param array command line */ - public function __construct(TestsConfiguration &$config) { - $this->config = &$config; + public function __construct(TestsConfiguration $config) { + $this->config = $config; if ($this->config->hasFlag('help') || $this->config->hasFlag('h')) { @@ -153,7 +153,7 @@ namespace phpdbg\testing { $paths = array(); $where = ($in != null) ? array($in) : $this->config['path']; - foreach ($where as &$path) { + foreach ($where as $path) { if ($path) { if (is_dir($path)) { $paths[] = $path; @@ -243,6 +243,7 @@ namespace phpdbg\testing { printf("\t--options\toptions to pass to phpdbg%s", PHP_EOL); printf("\t--phpdbg\tpath to phpdbg binary%s", PHP_EOL); printf('[flags]:%s', PHP_EOL); + printf("\t-diff2stdout\t\twrite diff to stdout instead of files%s", PHP_EOL); printf("\t-nodiff\t\tdo not write diffs on failure%s", PHP_EOL); printf("\t-nolog\t\tdo not write logs on failure%s", PHP_EOL); printf('[examples]:%s', PHP_EOL); @@ -266,9 +267,11 @@ namespace phpdbg\testing { $test = sprintf('%s/%s', $path, $file); if (preg_match('~\.test$~', $test)) { - yield new Test($this->config, $test); + $tests[] = new Test($this->config, $test); } } + + return $tests; } /** @@ -354,7 +357,7 @@ namespace phpdbg\testing { * @param array configuration * @param string file */ - public function __construct(TestsConfiguration &$config, &$file) { + public function __construct(TestsConfiguration $config, $file) { if (($handle = fopen($file, 'r'))) { while (($line = fgets($handle))) { $trim = trim($line); @@ -417,8 +420,8 @@ namespace phpdbg\testing { } fclose($handle); - $this->config = &$config; - $this->file = &$file; + $this->config = $config; + $this->file = $file; } } @@ -427,8 +430,7 @@ namespace phpdbg\testing { * */ public function getResult() { - $options = sprintf( - '-i%s -nqb', $this->file); + $options = sprintf('-i%s -nqb', $this->file); if ($this->options) { $options = sprintf( @@ -526,7 +528,7 @@ namespace phpdbg\testing { * Write log to disk if configuration allows it * */ - protected function writeLog(&$result = null) { + protected function writeLog($result = null) { $log = sprintf( '%s/%s.log', dirname($this->file), basename($this->file)); diff --git a/sapi/phpdbg/travis/ci.sh b/sapi/phpdbg/travis/ci.sh index 44d56a01f..206b158b9 100755 --- a/sapi/phpdbg/travis/ci.sh +++ b/sapi/phpdbg/travis/ci.sh @@ -1,9 +1,11 @@ #!/usr/bin/env sh git clone https://github.com/php/php-src -cd php-src/sapi +cd php-src +git checkout $PHP +cd sapi +rm -rf phpdbg git clone https://github.com/krakjoe/phpdbg.git cd ../ ./buildconf --force ./configure --disable-all --enable-phpdbg --enable-maintainer-zts make -make test-phpdbg diff --git a/svnclean.bat b/svnclean.bat deleted file mode 100755 index 4c0118d67..000000000 --- a/svnclean.bat +++ /dev/null @@ -1,2 +0,0 @@ -@echo off -cscript /nologo win32\build\cvsclean.js diff --git a/tests/classes/bug63462.phpt b/tests/classes/bug63462.phpt index dc5edbd5e..f425c1526 100644 --- a/tests/classes/bug63462.phpt +++ b/tests/classes/bug63462.phpt @@ -2,8 +2,6 @@ Test script to verify that magic methods should be called only once when accessing an unset property. --CREDITS-- Marco Pivetta <ocramius@gmail.com> ---XFAIL-- -Bug 63462 is not yet fixed --FILE-- <?php class Test { @@ -20,7 +18,7 @@ class Test { } function __get($name) { - echo '__get ' . $name . "\n"; + echo '__get ' . $name; return $this->$name; } @@ -54,13 +52,13 @@ $test->privateProperty = 'value'; --EXPECTF-- __get nonExisting -Notice: Undefined index: nonExisting in %__set__get_006.php on line %d +Notice: Undefined property: Test::$nonExisting in %sbug63462.php on line %d __get publicProperty -Notice: Undefined index: publicProperty in %__set__get_006.php on line %d +Notice: Undefined property: Test::$publicProperty in %sbug63462.php on line %d __get protectedProperty -Notice: Undefined index: protectedProperty in %__set__get_006.php on line %d +Notice: Undefined property: Test::$protectedProperty in %sbug63462.php on line %d __get privateProperty -Notice: Undefined index: privateProperty in %__set__get_006.php on line %d +Notice: Undefined property: Test::$privateProperty in %sbug63462.php on line %d __isset nonExisting __isset publicProperty __isset protectedProperty diff --git a/travis/compile.sh b/travis/compile.sh index 899fb5a33..6ad3bfc39 100755 --- a/travis/compile.sh +++ b/travis/compile.sh @@ -47,5 +47,6 @@ $TS \ --with-bz2 \ --with-openssl \ --with-gmp \ ---enable-bcmath +--enable-bcmath \ +--enable-phpdbg make --quiet @@ -1,10 +1,6 @@ #! /bin/sh -if test -d 'CVS'; then - ${MAKE:-make} -f build/build.mk cvsclean-work -elif test -d '.svn'; then - ${MAKE:-make} -f build/build.mk svnclean-work -elif test -d '.git'; then +if test -d '.git'; then ${MAKE:-make} -f build/build.mk gitclean-work else echo "Can't figure out your VCS, not cleaning." diff --git a/win32/build/cvsclean.js b/win32/build/cvsclean.js deleted file mode 100644 index c5f92a388..000000000 --- a/win32/build/cvsclean.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2009 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong <wez@thebrainroom.com> | - | Pierre A. Joye <pierre@php.net> | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -// Cleans up files that do not belong in the repository - -var FSO = WScript.CreateObject("Scripting.FileSystemObject"); -var WshShell = WScript.CreateObject("WScript.Shell"); -var STDOUT = WScript.StdOut; - -/* svn propget svn:ignore dirname */ -function find_ignore(dirname) -{ - dirname = "" + dirname; - dirname_len = dirname.length; - - if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && - dirname.substring(dirname_len - 4) == ".svn")) { - return; - } - - var f = FSO.GetFolder(dirname); - var fc = new Enumerator(f.SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - find_ignore(fc.item()); - } - - kill_from_ignore(dirname); -} - -/* recursive remove using ignore props style wildcard matching; - * note that FSO.DeleteFolder and FSO.DeleteFile methods both - * accept wildcards, but that they are dangerous to use eg: - * "*.php" will match "*.phpt" */ -function rm_r(filename) -{ - if (FSO.FolderExists(filename)) { - var fc = new Enumerator(FSO.GetFolder(filename).SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - rm_r(fc.item()); - } - - fc = new Enumerator(FSO.GetFolder(filename).Files); - - for (; !fc.atEnd(); fc.moveNext()) { - FSO.DeleteFile(fc.item(), true); - } - - FSO.DeleteFolder(filename, true); - } else if (FSO.FileExists(filename)) { - FSO.DeleteFile(filename, true); - } else { - /* we need to handle wildcards here */ - var foldername = FSO.GetParentFolderName(filename); - - if (foldername == "") - foldername = "."; - - var filename = FSO.GetFileName(filename); - - var retext = filename.replace(/\./g, '\\.'); - retext = '^' + retext.replace(/\*/g, '.*') + "$"; - var re = new RegExp(retext); - - var folder = FSO.GetFolder(foldername); - var fc = new Enumerator(folder.SubFolders); - for (; !fc.atEnd(); fc.moveNext()) { - - var item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - rm_r(fc.item()); - } - } - var fc = new Enumerator(folder.Files); - for (; !fc.atEnd(); fc.moveNext()) { - item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - FSO.DeleteFile(fc.item(), true); - } - } - } -} - -function kill_from_ignore(dirname) -{ - var l; - var e = WshShell.Exec("svn propget svn:ignore " + dirname); - var re = /^(config\.nice.*)|(\*)$/i; - - while (!e.StdOut.atEndOfStream) { - l = e.StdOut.ReadLine(); - if (l.length == 0 || re.test(l)) { - continue; - } - rm_r(dirname + l); - } - -} - -find_ignore("."); diff --git a/win32/build/svnclean.js b/win32/build/svnclean.js deleted file mode 100644 index c5f92a388..000000000 --- a/win32/build/svnclean.js +++ /dev/null @@ -1,120 +0,0 @@ -/* - +----------------------------------------------------------------------+ - | PHP Version 5 | - +----------------------------------------------------------------------+ - | Copyright (c) 1997-2009 The PHP Group | - +----------------------------------------------------------------------+ - | This source file is subject to version 3.01 of the PHP license, | - | that is bundled with this package in the file LICENSE, and is | - | available through the world-wide-web at the following url: | - | http://www.php.net/license/3_01.txt | - | If you did not receive a copy of the PHP license and are unable to | - | obtain it through the world-wide-web, please send a note to | - | license@php.net so we can mail you a copy immediately. | - +----------------------------------------------------------------------+ - | Author: Wez Furlong <wez@thebrainroom.com> | - | Pierre A. Joye <pierre@php.net> | - +----------------------------------------------------------------------+ -*/ - -/* $Id$ */ -// Cleans up files that do not belong in the repository - -var FSO = WScript.CreateObject("Scripting.FileSystemObject"); -var WshShell = WScript.CreateObject("WScript.Shell"); -var STDOUT = WScript.StdOut; - -/* svn propget svn:ignore dirname */ -function find_ignore(dirname) -{ - dirname = "" + dirname; - dirname_len = dirname.length; - - if (!FSO.FolderExists(dirname) || (dirname_len >= 4 && - dirname.substring(dirname_len - 4) == ".svn")) { - return; - } - - var f = FSO.GetFolder(dirname); - var fc = new Enumerator(f.SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - find_ignore(fc.item()); - } - - kill_from_ignore(dirname); -} - -/* recursive remove using ignore props style wildcard matching; - * note that FSO.DeleteFolder and FSO.DeleteFile methods both - * accept wildcards, but that they are dangerous to use eg: - * "*.php" will match "*.phpt" */ -function rm_r(filename) -{ - if (FSO.FolderExists(filename)) { - var fc = new Enumerator(FSO.GetFolder(filename).SubFolders); - - for (; !fc.atEnd(); fc.moveNext()) { - rm_r(fc.item()); - } - - fc = new Enumerator(FSO.GetFolder(filename).Files); - - for (; !fc.atEnd(); fc.moveNext()) { - FSO.DeleteFile(fc.item(), true); - } - - FSO.DeleteFolder(filename, true); - } else if (FSO.FileExists(filename)) { - FSO.DeleteFile(filename, true); - } else { - /* we need to handle wildcards here */ - var foldername = FSO.GetParentFolderName(filename); - - if (foldername == "") - foldername = "."; - - var filename = FSO.GetFileName(filename); - - var retext = filename.replace(/\./g, '\\.'); - retext = '^' + retext.replace(/\*/g, '.*') + "$"; - var re = new RegExp(retext); - - var folder = FSO.GetFolder(foldername); - var fc = new Enumerator(folder.SubFolders); - for (; !fc.atEnd(); fc.moveNext()) { - - var item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - rm_r(fc.item()); - } - } - var fc = new Enumerator(folder.Files); - for (; !fc.atEnd(); fc.moveNext()) { - item = FSO.GetFileName(fc.item()); - - if (item.match(re)) { - FSO.DeleteFile(fc.item(), true); - } - } - } -} - -function kill_from_ignore(dirname) -{ - var l; - var e = WshShell.Exec("svn propget svn:ignore " + dirname); - var re = /^(config\.nice.*)|(\*)$/i; - - while (!e.StdOut.atEndOfStream) { - l = e.StdOut.ReadLine(); - if (l.length == 0 || re.test(l)) { - continue; - } - rm_r(dirname + l); - } - -} - -find_ignore("."); diff --git a/win32/build/template.rc b/win32/build/template.rc index 13e92e9a3..f36f2c041 100644 --- a/win32/build/template.rc +++ b/win32/build/template.rc @@ -65,7 +65,7 @@ BEGIN #endif VALUE "FileVersion", EXT_VERSION VALUE "InternalName", INTERNAL_NAME - VALUE "LegalCopyright", "Copyright © 1997-2013 The PHP Group" + VALUE "LegalCopyright", "Copyright © 1997-2014 The PHP Group" VALUE "LegalTrademarks", "PHP" VALUE "OriginalFilename", FILE_NAME VALUE "ProductName", "PHP" |