mirror of
https://github.com/bdnugget/php-src.git
synced 2026-11-10 10:40:50 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
c49d270b17 |
No files matched your search
@@ -1,8 +1,8 @@
|
||||
define ____executor_globals
|
||||
if basic_functions_module.zts
|
||||
set $tsrm_ls = ts_resource_ex(0, 0)
|
||||
set $eg = ((zend_executor_globals*) (*((void ***) $tsrm_ls))[executor_globals_id-1])
|
||||
set $cg = ((zend_compiler_globals*) (*((void ***) $tsrm_ls))[compiler_globals_id-1])
|
||||
set $eg = ((zend_executor_globals) (*((void ***) $tsrm_ls))[executor_globals_id-1])
|
||||
set $cg = ((zend_compiler_globals) (*((void ***) $tsrm_ls))[compiler_globals_id-1])
|
||||
else
|
||||
set $eg = executor_globals
|
||||
set $cg = compiler_globals
|
||||
@@ -37,60 +37,9 @@ end
|
||||
define dump_bt
|
||||
set $t = $arg0
|
||||
while $t
|
||||
printf "[%p] ", $t
|
||||
printf "[0x%08x] ", $t
|
||||
if $t->function_state.function->common.function_name
|
||||
if $t->function_state.arguments
|
||||
set $count = (int)*($t->function_state.arguments)
|
||||
printf "%s(", $t->function_state.function->common.function_name
|
||||
while $count > 0
|
||||
set $zvalue = *(zval **)($t->function_state.arguments - $count)
|
||||
set $type = $zvalue->type
|
||||
if $type == 0
|
||||
printf "NULL"
|
||||
end
|
||||
if $type == 1
|
||||
printf "%ld", $zvalue->value.lval
|
||||
end
|
||||
if $type == 2
|
||||
printf "%lf", $zvalue->value.dval
|
||||
end
|
||||
if $type == 3
|
||||
if $zvalue->value.lval
|
||||
printf "true"
|
||||
else
|
||||
printf "false"
|
||||
end
|
||||
end
|
||||
if $type == 4
|
||||
printf "array(%d)[%p]", $zvalue->value.ht->nNumOfElements, $zvalue
|
||||
end
|
||||
if $type == 5
|
||||
printf "object[%p]", $zvalue
|
||||
end
|
||||
if $type == 6
|
||||
____print_str $zvalue->value.str.val $zvalue->value.str.len
|
||||
end
|
||||
if $type == 7
|
||||
printf "resource(#%d)", $zvalue->value.lval
|
||||
end
|
||||
if $type == 8
|
||||
printf "constant"
|
||||
end
|
||||
if $type == 9
|
||||
printf "const_array"
|
||||
end
|
||||
if $type > 9
|
||||
printf "unknown type %d", $type
|
||||
end
|
||||
set $count = $count -1
|
||||
if $count > 0
|
||||
printf ", "
|
||||
end
|
||||
end
|
||||
printf ") "
|
||||
else
|
||||
printf "%s() ", $t->function_state.function->common.function_name
|
||||
end
|
||||
printf "%s() ", $t->function_state.function->common.function_name
|
||||
else
|
||||
printf "??? "
|
||||
end
|
||||
@@ -218,7 +167,7 @@ define ____printzv
|
||||
____executor_globals
|
||||
set $zvalue = $arg0
|
||||
|
||||
printf "[%p] ", $zvalue
|
||||
printf "[0x%08x] ", $zvalue
|
||||
|
||||
if $zvalue == $eg.uninitialized_zval_ptr
|
||||
printf "*uninitialized* "
|
||||
@@ -259,7 +208,7 @@ end
|
||||
|
||||
define print_const_table
|
||||
set $ind = 1
|
||||
printf "[%p] {\n", $arg0
|
||||
printf "[0x%08x] {\n", $arg0
|
||||
____print_const_table $arg0
|
||||
printf "}\n"
|
||||
end
|
||||
@@ -299,7 +248,7 @@ end
|
||||
|
||||
define print_ht
|
||||
set $ind = 1
|
||||
printf "[%p] {\n", $arg0
|
||||
printf "[0x%08x] {\n", $arg0
|
||||
____print_ht $arg0 1
|
||||
printf "}\n"
|
||||
end
|
||||
@@ -310,7 +259,7 @@ end
|
||||
|
||||
define print_htptr
|
||||
set $ind = 1
|
||||
printf "[%p] {\n", $arg0
|
||||
printf "[0x%08x] {\n", $arg0
|
||||
____print_ht $arg0 0
|
||||
printf "}\n"
|
||||
end
|
||||
@@ -321,7 +270,7 @@ end
|
||||
|
||||
define print_htstr
|
||||
set $ind = 1
|
||||
printf "[%p] {\n", $arg0
|
||||
printf "[0x%08x] {\n", $arg0
|
||||
____print_ht $arg0 2
|
||||
printf "}\n"
|
||||
end
|
||||
@@ -357,7 +306,7 @@ end
|
||||
|
||||
define print_ft
|
||||
set $ind = 1
|
||||
printf "[%p] {\n", $arg0
|
||||
printf "[0x%08x] {\n", $arg0
|
||||
____print_ft $arg0
|
||||
printf "}\n"
|
||||
end
|
||||
@@ -434,7 +383,7 @@ end
|
||||
|
||||
define print_pi
|
||||
set $pi = $arg0
|
||||
printf "[%p] {\n", $pi
|
||||
printf "[0x%08x] {\n", $pi
|
||||
printf " h = %lu\n", $pi->h
|
||||
printf " flags = %d (", $pi->flags
|
||||
if $pi->flags & 0x100
|
||||
@@ -490,7 +439,7 @@ define printzn
|
||||
set $optype = "IS_UNUSED"
|
||||
end
|
||||
|
||||
printf "[%p] %s", $znode, $optype
|
||||
printf "[0x%08x] %s", $znode, $optype
|
||||
|
||||
if $znode->op_type == 1
|
||||
printf ": "
|
||||
@@ -570,7 +519,7 @@ define zmemcheck
|
||||
else
|
||||
set $filename = $filename + 1
|
||||
end
|
||||
printf " %p ", $aptr
|
||||
printf " 0x%08x ", $aptr
|
||||
if $p->size == sizeof(struct _zval_struct) && ((struct _zval_struct *)$aptr)->type >= 0 && ((struct _zval_struct *)$aptr)->type < 10
|
||||
printf "ZVAL?(%-2d) ", $p->size
|
||||
else
|
||||
@@ -600,7 +549,7 @@ define zmemcheck
|
||||
end
|
||||
end
|
||||
if $not_found
|
||||
printf "no such block that begins at %p.\n", $aptr
|
||||
printf "no such block that begins at 0x%08x.\n", $aptr
|
||||
end
|
||||
if $arg0 == 0
|
||||
printf "-------------------------------------------------------------------------------\n"
|
||||
|
||||
-173
@@ -1,173 +0,0 @@
|
||||
ext/mysqlnd/mysqlnd.h ident
|
||||
ext/simplexml/simplexml.c ident
|
||||
ext/iconv/php_iconv.h ident
|
||||
ext/posix/posix.c ident
|
||||
ext/recode/recode.c ident
|
||||
ext/skeleton/create_stubs ident
|
||||
ext/phar/phar/pharcommand.inc ident
|
||||
ext/phar/phar.c ident
|
||||
ext/sysvmsg/sysvmsg.c ident
|
||||
ext/enchant/enchant.c ident
|
||||
ext/reflection/php_reflection.c ident
|
||||
ext/oci8/oci8.c ident
|
||||
ext/dba/libinifile/inifile.c ident
|
||||
ext/dba/libflatfile/flatfile.c ident
|
||||
ext/dba/libcdb/cdb_make.c ident
|
||||
ext/dba/libcdb/cdb.c ident
|
||||
ext/filter/filter.c ident
|
||||
README.input_filter ident
|
||||
run-tests.php ident
|
||||
sapi/nsapi/nsapi.c ident
|
||||
sapi/continuity/capi.c ident
|
||||
Zend/RFCs/002.txt ident
|
||||
Zend/RFCs/003.txt ident
|
||||
NEWS merge=NEWS
|
||||
/ext/bz2/tests/005.phpt -crlf
|
||||
/ext/dom/tests/dom005.phpt -crlf
|
||||
/ext/dom/tests/DOMImplementation_createDocumentType_basic.phpt -crlf
|
||||
/ext/ereg/tests/009.phpt -crlf
|
||||
/ext/iconv/tests/eucjp2sjis.phpt -crlf
|
||||
/ext/iconv/tests/eucjp2utf8.phpt -crlf
|
||||
/ext/iconv/tests/iconv_stream_filter_delimiter.phpt -crlf
|
||||
/ext/iconv/tests/iconv_stream_filter.phpt -crlf
|
||||
/ext/mbstring/tests/mb_split-compat-01.phpt -crlf
|
||||
/ext/phar/tests/005.phpt -crlf
|
||||
/ext/phar/tests/phar_commitwrite.phpt -crlf
|
||||
/ext/phar/tests/phar_create_in_cwd.phpt -crlf
|
||||
/ext/phar/tests/phar_mount.phpt -crlf
|
||||
/ext/reflection/tests/009.phpt -crlf
|
||||
/ext/reflection/tests/025.phpt -crlf
|
||||
/ext/standard/tests/general_functions/highlight_heredoc.phpt -crlf
|
||||
/ext/standard/tests/general_functions/parse_ini_file.phpt -crlf
|
||||
/ext/standard/tests/general_functions/parse_ini_string_002.phpt -crlf
|
||||
/ext/standard/tests/strings/006.phpt -crlf
|
||||
/ext/standard/tests/strings/addslashes_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/addslashes_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/bug21453.phpt -crlf
|
||||
/ext/standard/tests/strings/chop_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/chunk_split_variation11.phpt -crlf
|
||||
/ext/standard/tests/strings/chunk_split_variation12.phpt -crlf
|
||||
/ext/standard/tests/strings/chunk_split_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/crc32_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/crc32_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/crc32_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/highlight_file.phpt -crlf
|
||||
/ext/standard/tests/strings/htmlentities_html4.phpt -crlf
|
||||
/ext/standard/tests/strings/lcfirst.phpt -crlf
|
||||
/ext/standard/tests/strings/ltrim.phpt -crlf
|
||||
/ext/standard/tests/strings/nl2br_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/php_strip_whitespace.phpt -crlf
|
||||
/ext/standard/tests/strings/rtrim.phpt -crlf
|
||||
/ext/standard/tests/strings/sprintf_f_2.phpt -crlf
|
||||
/ext/standard/tests/strings/sprintf_variation15.phpt -crlf
|
||||
/ext/standard/tests/strings/strcspn_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/strcspn_variation7.phpt -crlf
|
||||
/ext/standard/tests/strings/strcspn_variation8.phpt -crlf
|
||||
/ext/standard/tests/strings/stripos_variation1.phpt -crlf
|
||||
/ext/standard/tests/strings/stripos_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/stripos_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/stripos_variation5.phpt -crlf
|
||||
/ext/standard/tests/strings/stripos_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/stripslashes_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/stripslashes_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/stripslashes_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/stripslashes_variation5.phpt -crlf
|
||||
/ext/standard/tests/strings/str_ireplace.phpt -crlf
|
||||
/ext/standard/tests/strings/strnatcmp_basic.phpt -crlf
|
||||
/ext/standard/tests/strings/strncasecmp_variation9.phpt -crlf
|
||||
/ext/standard/tests/strings/strpos.phpt -crlf
|
||||
/ext/standard/tests/strings/strrchr_variation1.phpt -crlf
|
||||
/ext/standard/tests/strings/strrchr_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/strrchr_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/strrchr_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/strrchr_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/strrchr_variation7.phpt -crlf
|
||||
/ext/standard/tests/strings/str_replace.phpt -crlf
|
||||
/ext/standard/tests/strings/strrev_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/strrev_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/strripos_variation1.phpt -crlf
|
||||
/ext/standard/tests/strings/strripos_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/strripos_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/strripos_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/strripos_variation5.phpt -crlf
|
||||
/ext/standard/tests/strings/strrpos_variation1.phpt -crlf
|
||||
/ext/standard/tests/strings/strrpos_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/strrpos_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/strrpos_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/strrpos_variation5.phpt -crlf
|
||||
/ext/standard/tests/strings/strrpos_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/strspn_variation5.phpt -crlf
|
||||
/ext/standard/tests/strings/strspn_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/strspn_variation7.phpt -crlf
|
||||
/ext/standard/tests/strings/strspn_variation8.phpt -crlf
|
||||
/ext/standard/tests/strings/strstr.phpt -crlf
|
||||
/ext/standard/tests/strings/strtok_variation1.phpt -crlf
|
||||
/ext/standard/tests/strings/strtok_variation3.phpt -crlf
|
||||
/ext/standard/tests/strings/strtr_variation1.phpt -crlf
|
||||
/ext/standard/tests/strings/strtr_variation2.phpt -crlf
|
||||
/ext/standard/tests/strings/str_word_count.phpt -crlf
|
||||
/ext/standard/tests/strings/trim1.phpt -crlf
|
||||
/ext/standard/tests/strings/ucfirst.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation10.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation12.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation16.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation18.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation7.phpt -crlf
|
||||
/ext/standard/tests/strings/vfprintf_variation8.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation10.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation12.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation14.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation18.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation7.phpt -crlf
|
||||
/ext/standard/tests/strings/vprintf_variation8.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation10.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation12.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation14.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation16.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation4.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation6.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation7.phpt -crlf
|
||||
/ext/standard/tests/strings/vsprintf_variation8.phpt -crlf
|
||||
/ext/standard/tests/strings/wordwrap.phpt -crlf
|
||||
/ext/tidy/tests/010.phpt -crlf
|
||||
/ext/tidy/tests/012.phpt -crlf
|
||||
/ext/tidy/tests/025.phpt -crlf
|
||||
/ext/tidy/tests/030.phpt -crlf
|
||||
/ext/tokenizer/tests/bug26463.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation12.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation13.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation14.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation15.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation16.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation17.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation18.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation19.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation4.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation5.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation6.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation7.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation8.phpt -crlf
|
||||
/ext/tokenizer/tests/token_get_all_variation9.phpt -crlf
|
||||
/ext/xml/tests/bug26614_libxml.phpt -crlf
|
||||
/ext/xmlwriter/tests/004.phpt -crlf
|
||||
/ext/xmlwriter/tests/OO_004.phpt -crlf
|
||||
/ext/zlib/tests/005.phpt -crlf
|
||||
/ext/zlib/tests/gzfile_basic2.phpt -crlf
|
||||
/ext/zlib/tests/gzfile_basic.phpt -crlf
|
||||
/ext/zlib/tests/gzfilegzreadfile.phpt -crlf
|
||||
/ext/zlib/tests/readgzfile_basic2.phpt -crlf
|
||||
/ext/zlib/tests/readgzfile_basic.phpt -crlf
|
||||
/sapi/cli/tests/014.phpt -crlf
|
||||
/tests/run-test/test010.phpt -crlf
|
||||
/Zend/tests/bug35655.phpt -crlf
|
||||
/Zend/tests/bug48930.phpt -crlf
|
||||
/Zend/tests/bug61095.phpt -crlf
|
||||
/Zend/tests/heredoc_017.phpt -crlf
|
||||
/Zend/tests/heredoc_018.phpt -crlf
|
||||
/Zend/tests/nowdoc_013.phpt -crlf
|
||||
/Zend/tests/nowdoc_014.phpt -crlf
|
||||
/Zend/tests/nowdoc_015.phpt -crlf
|
||||
-254
@@ -1,254 +0,0 @@
|
||||
# General Ignores
|
||||
*~
|
||||
.#*
|
||||
*.
|
||||
*.slo
|
||||
*.mk
|
||||
*.mem
|
||||
*.gcda
|
||||
*.gcno
|
||||
*.la
|
||||
*.lo
|
||||
*.o
|
||||
*.a
|
||||
*.ncb
|
||||
*.opt
|
||||
*.plg
|
||||
*swp
|
||||
*.patch
|
||||
*.tgz
|
||||
*.tar.gz
|
||||
*.tar.bz2
|
||||
.FBCIndex
|
||||
.FBCLockFolder
|
||||
.deps
|
||||
.libs
|
||||
phpt.*
|
||||
core
|
||||
dynlib.m4
|
||||
Debug
|
||||
Debug_TS
|
||||
Makefile
|
||||
Makefile.fragments
|
||||
Makefile.objects
|
||||
Release
|
||||
Release_TS
|
||||
Release_TSDbg
|
||||
Release_TS_inline
|
||||
Release_inline
|
||||
ZendEngine1
|
||||
_libs
|
||||
acconfig.h
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
bsd_converted
|
||||
buildconf.stamp
|
||||
buildmk.stamp
|
||||
confdefs.h
|
||||
config.h
|
||||
config.guess
|
||||
config.cache
|
||||
config.h.in
|
||||
config.log
|
||||
config.nice
|
||||
config.nice.bat
|
||||
config.status
|
||||
config.sub
|
||||
config_vars.mk
|
||||
configuration-parser.c
|
||||
configuration-parser.h
|
||||
configuration-parser.output
|
||||
configuration-scanner.c
|
||||
configure
|
||||
configure.bat
|
||||
configure.js
|
||||
conftest
|
||||
conftest.c
|
||||
debug.log
|
||||
diff
|
||||
generated_lists
|
||||
include
|
||||
install-sh
|
||||
internal_functions.c
|
||||
lcov_data
|
||||
lcov_html
|
||||
libs
|
||||
libtool
|
||||
meta_cc
|
||||
meta_ccld
|
||||
missing
|
||||
mkinstalldirs
|
||||
modules
|
||||
php
|
||||
php-*.tar.gz
|
||||
php5.spec
|
||||
php_lcov.info
|
||||
php_test_results_*.txt
|
||||
php_version.h
|
||||
results.txt
|
||||
shlibtool
|
||||
stamp-h
|
||||
test.php3
|
||||
tmp-php.ini
|
||||
want_dependencies
|
||||
x64
|
||||
stamp-h.in
|
||||
scan_makefile_in.awk
|
||||
TSRM/tsrm_config.h
|
||||
Zend/zend_config.h
|
||||
Zend/zend_ini_parser.c
|
||||
Zend/zend_ini_parser.h
|
||||
Zend/zend_ini_parser.output
|
||||
Zend/zend_language_parser.c
|
||||
Zend/zend_language_parser.h
|
||||
Zend/zend_language_parser.output
|
||||
ext/date/lib/timelib_config.h
|
||||
ext/iconv/php_iconv_aliased_libiconv.h
|
||||
ext/phar/phar.php
|
||||
main/php_config.h
|
||||
main/php_config.h.in
|
||||
|
||||
# Test specific Ignores
|
||||
tests/*/*.diff
|
||||
tests/*/*.out
|
||||
tests/*/*.php
|
||||
tests/*/*.exp
|
||||
tests/*/*.log
|
||||
tests/*/*.sh
|
||||
*/tests/*.diff
|
||||
*/tests/*.out
|
||||
*/tests/*.php
|
||||
*/tests/*.exp
|
||||
*/tests/*.log
|
||||
*/tests/*.sh
|
||||
*/tests/*/*.diff
|
||||
*/tests/*/*.out
|
||||
*/tests/*/*.php
|
||||
*/tests/*/*.exp
|
||||
*/tests/*/*.log
|
||||
*/tests/*/*.sh
|
||||
*/*/tests/*.diff
|
||||
*/*/tests/*.out
|
||||
*/*/tests/*.php
|
||||
*/*/tests/*.exp
|
||||
*/*/tests/*.log
|
||||
*/*/tests/*.sh
|
||||
*/*/tests/*/*.diff
|
||||
*/*/tests/*/*.out
|
||||
*/*/tests/*/*.php
|
||||
*/*/tests/*/*.exp
|
||||
*/*/tests/*/*.log
|
||||
*/*/tests/*/*.sh
|
||||
|
||||
# Extension specifc ignores
|
||||
ext/*/configure.in
|
||||
ext/*/ltmain.sh
|
||||
ext/*/libs.mk
|
||||
ext/*/build
|
||||
ext/*/scan_makefile_in.awk
|
||||
ext/*/Makefile.global
|
||||
ext/*/acinclude.m4
|
||||
ext/*/config.sub
|
||||
|
||||
# Extension specific
|
||||
ext/iconv/scan_makefile_in.awk
|
||||
ext/iconv/php_have_bsd_iconv.h
|
||||
ext/iconv/php_have_ibm_iconv.h
|
||||
ext/iconv/php_have_libiconv.h
|
||||
ext/iconv/php_php_iconv_h_path.h
|
||||
ext/iconv/php_have_glibc_iconv.h
|
||||
ext/iconv/php_php_iconv_impl.h
|
||||
ext/iconv/php_have_iconv.h
|
||||
ext/iconv/php_iconv_supports_errno.h
|
||||
ext/mbstring/libmbfl/Makefile.in
|
||||
ext/mbstring/libmbfl/autoscan.log
|
||||
ext/mbstring/libmbfl/config.sub
|
||||
ext/mbstring/libmbfl/depcomp
|
||||
ext/mbstring/libmbfl/ltmain.sh
|
||||
ext/mbstring/libmbfl/stamp-h1
|
||||
ext/mbstring/libmbfl/*.dll
|
||||
ext/mbstring/libmbfl/*.lib
|
||||
ext/mbstring/libmbfl/*.RES
|
||||
ext/mbstring/libmbfl/*.res
|
||||
ext/mbstring/libmbfl/*.obj
|
||||
ext/mbstring/libmbfl/*.tds
|
||||
ext/mbstring/libmbfl/filters/Makefile.in
|
||||
ext/mbstring/libmbfl/mbfl/Makefile.in
|
||||
ext/mbstring/libmbfl/mbfl/EastAsianWidth.txt
|
||||
ext/mbstring/libmbfl/nls/Makefile.in
|
||||
ext/mssql/#*#
|
||||
ext/mssql/Makefile.global
|
||||
ext/mssql/acinclude.m4
|
||||
ext/mssql/config.sub
|
||||
ext/mssql/configure.in
|
||||
ext/mssql/ltmain.sh
|
||||
ext/mysql/weztest.sqlite
|
||||
ext/oci8/tests/*.tmp
|
||||
ext/oci8/tests/*.vglog
|
||||
ext/pdo/conftest*
|
||||
ext/pdo/tests/*.db
|
||||
ext/pdo/tests/*.tmp
|
||||
ext/pdo_firebird/conftest*
|
||||
ext/pdo_mysql/conftest*
|
||||
ext/pdo_mysql/tests/*.db
|
||||
ext/pdo_mysql/tests/*.tmp
|
||||
ext/pdo_oci/conftest*
|
||||
ext/pdo_odbc/tests/*.db
|
||||
ext/pdo_odbc/tests/*.tmp
|
||||
ext/pdo_odbc/tests/*.mdb
|
||||
ext/pdo_pgsql/conftest*
|
||||
ext/pdo_pgsql/tests/*.db
|
||||
ext/pdo_pgsql/tests/*.tmp
|
||||
ext/pdo_sqlite/conftest*
|
||||
ext/pdo_sqlite/sqlite3.h
|
||||
ext/pdo_sqlite/tests/*.db
|
||||
ext/pdo_sqlite/tests/*.tmp
|
||||
ext/phar/phar.phar
|
||||
ext/pspell/tests/*.tmp
|
||||
ext/reflection/xml
|
||||
ext/reflection/html
|
||||
ext/reflection/spl.chm
|
||||
ext/simplexml/examples/security.new.xml
|
||||
ext/spl/examples/.htaccess
|
||||
ext/spl/examples/*.phps
|
||||
ext/sqlite/weztest.sqlite
|
||||
ext/sqlite/libsqlite/src/sqlite.h
|
||||
ext/sqlite/libsqlite/src/parse.out
|
||||
ext/sqlite/libsqlite/src/libsqlite.dsw
|
||||
ext/sqlite3/tests/phpsql*
|
||||
ext/sqlite3/tests/*.db
|
||||
ext/sqlite3/tests/*.tmp
|
||||
ext/standard/tests/misc/*.txt
|
||||
ext/standard/tests/strings/*.txt
|
||||
main/build-defs.h
|
||||
main/internal_functions_cli.c
|
||||
main/config.w32.h
|
||||
main/stamp-h1
|
||||
main/streams/build-defs.h
|
||||
main/streams/stamp-h1
|
||||
pear/install-pear-nozlib.phar
|
||||
pear/phpize
|
||||
pear/run-tests
|
||||
pear/php-config
|
||||
pear/scripts
|
||||
sapi/apache/libphp5.module
|
||||
sapi/apache2handler/libphp5.module
|
||||
sapi/apache_hooks/libphp5.module
|
||||
sapi/cgi/php-cgi
|
||||
sapi/cli/php.1
|
||||
sapi/fpm/php-fpm
|
||||
sapi/fpm/php-fpm.1
|
||||
sapi/fpm/init.d.php-fpm
|
||||
sapi/fpm/php-fpm.conf
|
||||
sapi/fpm/fpm/php-cgi
|
||||
scripts/php-config
|
||||
scripts/phpize
|
||||
scripts/man1/*.1
|
||||
win32/*.suo
|
||||
win32/*.aps
|
||||
win32/*.positions
|
||||
win32/ext
|
||||
win32/phpts.def
|
||||
win32/wsyslog.h
|
||||
win32/win32.dsp
|
||||
win32/php.dsw
|
||||
+2
-2
@@ -497,8 +497,8 @@ STATUS: Working
|
||||
SINCE: 4.0.3
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: snmp
|
||||
PRIMARY MAINTAINER: Boris Lytochkin <lytboris@php.net>, Rasmus Lerdorf <rasmus@php.net>, Pierre-Alain Joye <pajoye@php.net>
|
||||
MAINTENANCE: Maintained
|
||||
PRIMARY MAINTAINER: Rasmus Lerdorf <rasmus@php.net>, Pierre-Alain Joye <pajoye@php.net>
|
||||
MAINTENANCE: Odd Fixes
|
||||
STATUS: Working
|
||||
-------------------------------------------------------------------------------
|
||||
EXTENSION: sockets
|
||||
|
||||
+1
-2
@@ -12,8 +12,7 @@ php_lcov.info: lcov-test
|
||||
@rm -rf lcov_data/
|
||||
@$(mkinstalldirs) lcov_data/
|
||||
@echo
|
||||
-@files=`find . -name \*.gcda -o -name \*.gcno -o -name \*.da -o -name \*.h | sed -e 's/^\.\///' | sed -e 's/\.gcda//g' -e 's/\.gcno//g' -e 's/\.da//g' | uniq` ;\
|
||||
for x in $$files; do \
|
||||
-@find . -name \*.gcda -o -name \*.gcno -o -name \*.da -o -name \*.h | sed -e 's/^\.\///' | sed -e 's/\.gcda//g' -e 's/\.gcno//g' -e 's/\.da//g' | uniq | while read x; do \
|
||||
echo -n . ;\
|
||||
y=`echo $$x | sed -e 's!\.libs/!!'`; \
|
||||
dir=lcov_data/`dirname $$x`; \
|
||||
|
||||
+1
-5
@@ -13,8 +13,6 @@ all: $(all_targets)
|
||||
|
||||
build-modules: $(PHP_MODULES) $(PHP_ZEND_EX)
|
||||
|
||||
build-binaries: $(PHP_BINARIES)
|
||||
|
||||
libphp$(PHP_MAJOR_VERSION).la: $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS)
|
||||
$(LIBTOOL) --mode=link $(CC) $(CFLAGS) $(EXTRA_CFLAGS) -rpath $(phptempdir) $(EXTRA_LDFLAGS) $(LDFLAGS) $(PHP_RPATHS) $(PHP_GLOBAL_OBJS) $(PHP_SAPI_OBJS) $(EXTRA_LIBS) $(ZEND_EXTRA_LIBS) -o $@
|
||||
-@$(LIBTOOL) --silent --mode=install cp $@ $(phptempdir)/$@ >/dev/null 2>&1
|
||||
@@ -37,8 +35,6 @@ install-sapi: $(OVERALL_TARGET)
|
||||
fi
|
||||
@$(INSTALL_IT)
|
||||
|
||||
install-binaries: build-binaries $(install_binary_targets)
|
||||
|
||||
install-modules: build-modules
|
||||
@test -d modules && \
|
||||
$(mkinstalldirs) $(INSTALL_ROOT)$(EXTENSION_DIR)
|
||||
@@ -83,7 +79,7 @@ PHP_TEST_SHARED_EXTENSIONS = ` \
|
||||
. $$i; $(top_srcdir)/build/shtool echo -n -- " -d $(ZEND_EXT_TYPE)=$(top_builddir)/modules/$$dlname"; \
|
||||
done; \
|
||||
fi`
|
||||
PHP_DEPRECATED_DIRECTIVES_REGEX = '^(magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[\t\ ]*='
|
||||
PHP_DEPRECATED_DIRECTIVES_REGEX = '^(define_syslog_variables|register_(globals|long_arrays)?|safe_mode|magic_quotes_(gpc|runtime|sybase)?|(zend_)?extension(_debug)?(_ts)?)[\t\ ]*='
|
||||
|
||||
test: all
|
||||
-@if test ! -z "$(PHP_EXECUTABLE)" && test -x "$(PHP_EXECUTABLE)"; then \
|
||||
|
||||
@@ -1,590 +1,125 @@
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
26 Apr 2012, PHP 5.4.1
|
||||
08 Dec 2011, PHP 5.3.9RC3
|
||||
|
||||
- CLI Server:
|
||||
. Fixed bug #61461 (missing checks around malloc() calls). (Ilia)
|
||||
. Implemented FR #60850 (Built in web server does not set
|
||||
$_SERVER['SCRIPT_FILENAME'] when using router). (Laruence)
|
||||
. "Connection: close" instead of "Connection: closed" (Gustavo)
|
||||
- Filter:
|
||||
. Fixed Bug #55478 (FILTER_VALIDATE_EMAIL fails with internationalized
|
||||
domain name addresses containing >1 -). (Ilia)
|
||||
|
||||
- Core:
|
||||
. Fixed crash in ZTS using same class in many threads. (Johannes)
|
||||
. Fixed bug #61374 (html_entity_decode tries to decode code points that don't
|
||||
exist in ISO-8859-1). (Gustavo)
|
||||
. Fixed bug #61273 (call_user_func_array with more than 16333 arguments
|
||||
leaks / crashes). (Laruence)
|
||||
. Fixed bug #61225 (Incorrect lexing of 0b00*+<NUM>). (Pierrick)
|
||||
. Fixed bug #61165 (Segfault - strip_tags()). (Laruence)
|
||||
. Fixed bug #61106 (Segfault when using header_register_callback). (Nikita
|
||||
Popov)
|
||||
. Fixed bug #61087 (Memory leak in parse_ini_file when specifying
|
||||
invalid scanner mode). (Nikic, Laruence)
|
||||
. Fixed bug #61072 (Memory leak when restoring an exception handler).
|
||||
(Nikic, Laruence)
|
||||
. Fixed bug #61058 (array_fill leaks if start index is PHP_INT_MAX).
|
||||
(Laruence)
|
||||
. Fixed bug #61052 (Missing error check in trait 'insteadof' clause). (Stefan)
|
||||
. Fixed bug #61011 (Crash when an exception is thrown by __autoload
|
||||
accessing a static property). (Laruence)
|
||||
. Fixed bug #61000 (Exceeding max nesting level doesn't delete numerical
|
||||
vars). (Laruence)
|
||||
. Fixed bug #60978 (exit code incorrect). (Laruence)
|
||||
. Fixed bug #60911 (Confusing error message when extending traits). (Stefan)
|
||||
. Fixed bug #60801 (strpbrk() mishandles NUL byte). (Adam)
|
||||
. Fixed bug #60717 (Order of traits in use statement can cause a fatal
|
||||
error). (Stefan)
|
||||
. Fixed bug #60573 (type hinting with "self" keyword causes weird errors).
|
||||
(Laruence)
|
||||
. Fixed bug #60569 (Nullbyte truncates Exception $message). (Ilia)
|
||||
. Fixed bug #52719 (array_walk_recursive crashes if third param of the
|
||||
function is by reference). (Nikita Popov)
|
||||
. Improve performance of set_exception_handler while doing reset (Laruence)
|
||||
- cURL:
|
||||
. Fixed bug #60439 (curl_copy_handle segfault when used with
|
||||
CURLOPT_PROGRESSFUNCTION). (Pierrick)
|
||||
|
||||
- fileinfo:
|
||||
. Fix fileinfo test problems. (Anatoliy Belsky)
|
||||
|
||||
- FPM
|
||||
. Fixed bug #61430 (Transposed memset() params in sapi/fpm/fpm/fpm_shm.c).
|
||||
(michaelhood at gmail dot com, Ilia)
|
||||
|
||||
- Ibase
|
||||
. Fixed bug #60947 (Segmentation fault while executing ibase_db_info).
|
||||
(Ilia)
|
||||
|
||||
- Installation
|
||||
. Fixed bug #61172 (Add Apache 2.4 support). (Chris Jones)
|
||||
|
||||
- Intl:
|
||||
. Fixed bug #61487 (Incorrent bounds checking in grapheme_strpos).
|
||||
(Stas)
|
||||
|
||||
- mbstring:
|
||||
. MFH mb_ereg_replace_callback() for security enhancements. (Rui)
|
||||
|
||||
- mysqli
|
||||
. Fixed bug #61003 (mysql_stat() require a valid connection). (Johannes).
|
||||
|
||||
- mysqlnd
|
||||
. Fixed bug #60948 (mysqlnd FTBFS when -Wformat-security is enabled).
|
||||
(Johannes)
|
||||
|
||||
- Readline:
|
||||
. Fixed bug #61088 (Memory leak in readline_callback_handler_install).
|
||||
(Nikic, Laruence)
|
||||
|
||||
- Session
|
||||
. Fixed bug #60634 (Segmentation fault when trying to die() in
|
||||
SessionHandler::write()). (Ilia)
|
||||
- Date:
|
||||
. Fixed bug #54851 (DateTime::createFromFormat() doesn't interpret "D").
|
||||
(Derick)
|
||||
. Fixed bug #53502 (strtotime with timezone memory leak). (Derick)
|
||||
. Fixed bug #52062 (large timestamps with DateTime::getTimestamp and
|
||||
DateTime::setTimestamp). (Derick)
|
||||
. Fixed bug #51994 (date_parse_from_format is parsing invalid date using 'yz'
|
||||
format). (Derick)
|
||||
. Fixed bug #52113 (Seg fault while creating (by unserialization)
|
||||
DatePeriod). (Derick)
|
||||
|
||||
- SOAP
|
||||
. Fixed bug #61423 (gzip compression fails). (Ilia)
|
||||
. Fixed bug #60887 (SoapClient ignores user_agent option and sends no
|
||||
User-Agent header). (carloschilazo at gmail dot com)
|
||||
. Fixed bug #60842, #51775 (Chunked response parsing error when
|
||||
chunksize length line is > 10 bytes). (Ilia)
|
||||
. Fixed bug #49853 (Soap Client stream context header option ignored).
|
||||
(Dmitry)
|
||||
. Fixed bug #54911 (Access to a undefined member in inherit SoapClient may
|
||||
cause Segmentation Fault). (Dmitry)
|
||||
|
||||
- PDO
|
||||
. Fixed bug #61292 (Segfault while calling a method on an overloaded PDO
|
||||
object). (Laruence)
|
||||
24 Nov 2011, PHP 5.3.9RC2
|
||||
|
||||
- PDO_mysql
|
||||
. Fixed bug #61207 (PDO::nextRowset() after a multi-statement query doesn't
|
||||
always work). (Johannes)
|
||||
. Fixed bug #61194 (PDO should export compression flag with myslqnd).
|
||||
(Johannes)
|
||||
|
||||
- PDO_odbc
|
||||
. Fixed bug #61212 (PDO ODBC Segfaults on SQL_SUCESS_WITH_INFO). (Ilia)
|
||||
|
||||
- Phar
|
||||
. Fixed bug #61184 (Phar::webPhar() generates headers with trailing NUL
|
||||
bytes). (Nikita Popov)
|
||||
|
||||
- Reflection:
|
||||
. Fixed bug #60968 (Late static binding doesn't work with
|
||||
ReflectionMethod::invokeArgs()). (Laruence)
|
||||
|
||||
- SPL:
|
||||
. Fixed bug #61453 (SplObjectStorage does not identify objects correctly).
|
||||
(Gustavo)
|
||||
. Fixed bug #61347 (inconsistent isset behavior of Arrayobject). (Laruence)
|
||||
|
||||
- Standard:
|
||||
. Fixed memory leak in substr_replace. (Pierrick)
|
||||
. Make max_file_uploads ini directive settable outside of php.ini (Rasmus)
|
||||
. Fixed bug #61409 (Bad formatting on phpinfo()). (Jakub Vrana)
|
||||
. Fixed bug #60222 (time_nanosleep() does validate input params). (Ilia)
|
||||
. Fixed bug #60106 (stream_socket_server silently truncates long unix socket
|
||||
paths). (Ilia)
|
||||
|
||||
- XMLRPC:
|
||||
. Fixed bug #61264 (xmlrpc_parse_method_descriptions leaks temporary
|
||||
variable). (Nikita Popov)
|
||||
. Fixed bug #61097 (Memory leak in xmlrpc functions copying zvals). (Nikita
|
||||
Popov)
|
||||
|
||||
- Zlib:
|
||||
. Fixed bug #61306 (initialization of global inappropriate for ZTS). (Gustavo)
|
||||
. Fixed bug #61287 (A particular string fails to decompress). (Mike)
|
||||
. Fixed bug #61139 (gzopen leaks when specifying invalid mode). (Nikita Popov)
|
||||
|
||||
01 Mar 2012, PHP 5.4.0
|
||||
|
||||
- Installation:
|
||||
. autoconf 2.59+ is now supported (and required) for generating the
|
||||
configure script with ./buildconf. Autoconf 2.60+ is desirable
|
||||
otherwise the configure help order may be incorrect. (Rasmus, Chris Jones)
|
||||
|
||||
- Removed legacy features:
|
||||
. break/continue $var syntax. (Dmitry)
|
||||
. Safe mode and all related php.ini options. (Kalle)
|
||||
. register_globals and register_long_arrays php.ini options. (Kalle)
|
||||
. import_request_variables(). (Kalle)
|
||||
. allow_call_time_pass_reference. (Pierrick)
|
||||
. define_syslog_variables php.ini option and its associated function. (Kalle)
|
||||
. highlight.bg php.ini option. (Kalle)
|
||||
. safe_mode, safe_mode_gid, safe_mode_include_dir,
|
||||
safe_mode_exec_dir, safe_mode_allowed_env_vars and
|
||||
safe_mode_protected_env_vars php.ini options.
|
||||
. zend.ze1_compatibility_mode php.ini option.
|
||||
. Session bug compatibility mode (session.bug_compat_42 and
|
||||
session.bug_compat_warn php.ini options). (Kalle)
|
||||
. session_is_registered(), session_register() and session_unregister()
|
||||
functions. (Kalle)
|
||||
. y2k_compliance php.ini option. (Kalle)
|
||||
. magic_quotes_gpc, magic_quotes_runtime and magic_quotes_sybase
|
||||
php.ini options. get_magic_quotes_gpc, get_magic_quotes_runtime are kept
|
||||
but always return false, set_magic_quotes_runtime raises an
|
||||
E_CORE_ERROR. (Pierrick, Pierre)
|
||||
. Removed support for putenv("TZ=..") for setting the timezone. (Derick)
|
||||
. Removed the timezone guessing algorithm in case the timezone isn't set with
|
||||
date.timezone or date_default_timezone_set(). Instead of a guessed
|
||||
timezone, "UTC" is now used instead. (Derick)
|
||||
|
||||
- Moved extensions to PECL:
|
||||
. ext/sqlite. (Note: the ext/sqlite3 and ext/pdo_sqlite extensions are
|
||||
not affected) (Johannes)
|
||||
|
||||
- General improvements:
|
||||
. Added short array syntax support ([1,2,3]), see UPGRADING guide for full
|
||||
details. (rsky0711 at gmail . com, sebastian.deutsch at 9elements . com,
|
||||
Pierre)
|
||||
. Added binary number format (0b001010). (Jonah dot Harris at gmail dot com)
|
||||
. Added support for Class::{expr}() syntax (Pierrick)
|
||||
. Added multibyte support by default. Previously PHP had to be compiled
|
||||
with --enable-zend-multibyte. Now it can be enabled or disabled through
|
||||
the zend.multibyte directive in php.ini. (Dmitry)
|
||||
. Removed compile time dependency from ext/mbstring (Dmitry)
|
||||
. Added support for Traits. (Stefan, with fixes by Dmitry and Laruence)
|
||||
. Added closure $this support back. (Stas)
|
||||
. Added array dereferencing support. (Felipe)
|
||||
. Added callable typehint. (Hannes)
|
||||
. Added indirect method call through array. FR #47160. (Felipe)
|
||||
. Added DTrace support. (David Soria Parra)
|
||||
. Added class member access on instantiation (e.g. (new foo)->bar()) support.
|
||||
(Felipe)
|
||||
. <?= is now always available regardless of the short_open_tag setting. (Rasmus)
|
||||
. Implemented Zend Signal Handling (configurable option --enable-zend-signals,
|
||||
off by default). (Lucas Nealan, Arnaud Le Blanc, Brian Shire, Ilia)
|
||||
. Improved output layer, see README.NEW-OUTPUT-API for internals. (Mike)
|
||||
. Improved UNIX build system to allow building multiple PHP binary SAPIs and
|
||||
one SAPI module the same time. FR #53271, FR #52419. (Jani)
|
||||
. Implemented closure rebinding as parameter to bindTo. (Gustavo Lopes)
|
||||
. Improved the warning message of incompatible arguments. (Laruence)
|
||||
. Improved ternary operator performance when returning arrays. (Arnaud, Dmitry)
|
||||
. Changed error handlers to only generate docref links when the docref_root
|
||||
php.ini setting is not empty. (Derick)
|
||||
. Changed silent conversion of array to string to produce a notice. (Patrick)
|
||||
. Changed default encoding from ISO-8859-1 to UTF-8 when not specified in
|
||||
htmlspecialchars and htmlentities. (Rasmus)
|
||||
. Changed casting of null/''/false into an Object when adding a property
|
||||
from E_STRICT into a warning. (Scott)
|
||||
. Changed E_ALL to include E_STRICT. (Stas)
|
||||
. Disabled Windows CRT warning by default, can be enabled again using the
|
||||
php.ini directive windows_show_crt_warnings. (Pierre)
|
||||
. Fixed bug #55378: Binary number literal returns float number though its
|
||||
value is small enough. (Derick)
|
||||
|
||||
- Improved Zend Engine memory usage: (Dmitry)
|
||||
. Improved parse error messages. (Felipe)
|
||||
. Replaced zend_function.pass_rest_by_reference by
|
||||
ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags.
|
||||
. Replaced zend_function.return_reference by ZEND_ACC_RETURN_REFERENCE
|
||||
in zend_function.fn_flags.
|
||||
. Removed zend_arg_info.required_num_args as it was only needed for internal
|
||||
functions. Now the first arg_info for internal functions (which has special
|
||||
meaning) is represented by the zend_internal_function_info structure.
|
||||
. Moved zend_op_array.size, size_var, size_literal, current_brk_cont,
|
||||
backpatch_count into CG(context) as they are used only during compilation.
|
||||
. Moved zend_op_array.start_op into EG(start_op) as it's used only for
|
||||
'interactive' execution of a single top-level op-array.
|
||||
. Replaced zend_op_array.done_pass_two by ZEND_ACC_DONE_PASS_TWO in
|
||||
zend_op_array.fn_flags.
|
||||
. op_array.vars array is trimmed (reallocated) during pass_two.
|
||||
. Replaced zend_class_entry.constants_updated by ZEND_ACC_CONSTANTS_UPDATED
|
||||
in zend_class_entry.ce_flags.
|
||||
. Reduced the size of zend_class_entry by sharing the same memory space
|
||||
by different information for internal and user classes.
|
||||
See zend_class_entry.info union.
|
||||
. Reduced size of temp_variable.
|
||||
|
||||
- Improved Zend Engine - performance tweaks and optimizations: (Dmitry)
|
||||
. Inlined most probable code-paths for arithmetic operations directly into
|
||||
executor.
|
||||
. Eliminated unnecessary iterations during request startup/shutdown.
|
||||
. Changed $GLOBALS into a JIT autoglobal, so it's initialized only if used.
|
||||
(this may affect opcode caches!)
|
||||
. Improved performance of @ (silence) operator.
|
||||
. Simplified string offset reading. Given $str="abc" then $str[1][0] is now
|
||||
a legal construct.
|
||||
. Added caches to eliminate repeatable run-time bindings of functions,
|
||||
classes, constants, methods and properties.
|
||||
. Added concept of interned strings. All strings constants known at compile
|
||||
time are allocated in a single copy and never changed.
|
||||
. ZEND_RECV now always has IS_CV as its result.
|
||||
. ZEND_CATCH now has to be used only with constant class names.
|
||||
. ZEND_FETCH_DIM_? may fetch array and dimension operands in different order.
|
||||
. Simplified ZEND_FETCH_*_R operations. They can't be used with the
|
||||
EXT_TYPE_UNUSED flag any more. This is a very rare and useless case.
|
||||
ZEND_FREE might be required after them instead.
|
||||
. Split ZEND_RETURN into two new instructions ZEND_RETURN and
|
||||
ZEND_RETURN_BY_REF.
|
||||
. Optimized access to global constants using values with pre-calculated
|
||||
hash_values from the literals table.
|
||||
. Optimized access to static properties using executor specialization.
|
||||
A constant class name may be used as a direct operand of ZEND_FETCH_*
|
||||
instruction without previous ZEND_FETCH_CLASS.
|
||||
. zend_stack and zend_ptr_stack allocation is delayed until actual usage.
|
||||
|
||||
- Other improvements to Zend Engine:
|
||||
. Added an optimization which saves memory and emalloc/efree calls for empty
|
||||
HashTables. (Stas, Dmitry)
|
||||
. Added ability to reset user opcode handlers (Yoram).
|
||||
. Changed the structure of op_array.opcodes. The constant values are moved from
|
||||
opcode operands into a separate literal table. (Dmitry)
|
||||
. Fixed (disabled) inline-caching for ZEND_OVERLOADED_FUNCTION methods.
|
||||
(Dmitry)
|
||||
|
||||
- Improved core functions:
|
||||
. Enforce an extended class' __construct arguments to match the
|
||||
abstract constructor in the base class.
|
||||
. Disallow reusing superglobal names as parameter names.
|
||||
. Added optional argument to debug_backtrace() and debug_print_backtrace()
|
||||
to limit the amount of stack frames returned. (Sebastian, Patrick)
|
||||
. Added hex2bin() function. (Scott)
|
||||
. number_format() no longer truncates multibyte decimal points and thousand
|
||||
separators to the first byte. FR #53457. (Adam)
|
||||
. Added support for object references in recursive serialize() calls.
|
||||
FR #36424. (Mike)
|
||||
. Added support for SORT_NATURAL and SORT_FLAG_CASE in array
|
||||
sort functions (sort, rsort, ksort, krsort, asort, arsort and
|
||||
array_multisort). FR#55158 (Arpad)
|
||||
. Added stream metadata API support and stream_metadata() stream class
|
||||
handler. (Stas)
|
||||
. User wrappers can now define a stream_truncate() method that responds
|
||||
to truncation, e.g. through ftruncate(). FR #53888. (Gustavo)
|
||||
. Improved unserialize() performance.
|
||||
(galaxy dot mipt at gmail dot com, Kalle)
|
||||
. Changed array_combine() to return empty array instead of FALSE when both
|
||||
parameter arrays are empty. FR #34857. (joel.perras@gmail.com)
|
||||
. Fixed bug #61095 (Incorect lexing of 0x00*+<NUM>). (Etienne)
|
||||
. Fixed bug #60965 (Buffer overflow on htmlspecialchars/entities with
|
||||
$double=false). (Gustavo)
|
||||
. Fixed bug #60895 (Possible invalid handler usage in windows random
|
||||
functions). (Pierre)
|
||||
. Fixed bug #60879 (unserialize() Does not invoke __wakeup() on object).
|
||||
(Pierre, Steve)
|
||||
. Fixed bug #60825 (Segfault when running symfony 2 tests).
|
||||
(Dmitry, Laruence)
|
||||
. Fixed bug #60627 (httpd.worker segfault on startup with php_value).
|
||||
. Fixed bug #60613 (Segmentation fault with $cls->{expr}() syntax). (Dmitry)
|
||||
. Fixed bug #60611 (Segmentation fault with Cls::{expr}() syntax). (Laruence)
|
||||
(Laruence)
|
||||
. Fixed bug #60558 (Invalid read and writes). (Laruence)
|
||||
. Fixed bug #60444 (Segmentation fault with include & class extending).
|
||||
(Laruence, Dmitry).
|
||||
. Fixed bug #60362 (non-existent sub-sub keys should not have values).
|
||||
(Laruence, alan_k, Stas)
|
||||
. Fixed bug #60350 (No string escape code for ESC (ascii 27), normally \e).
|
||||
(php at mickweiss dot com)
|
||||
. Fixed bug #60321 (ob_get_status(true) no longer returns an array when
|
||||
buffer is empty). (Pierrick)
|
||||
. Fixed bug #60282 (Segfault when using ob_gzhandler() with open buffers).
|
||||
(Laruence)
|
||||
. Fixed bug #60240 (invalid read/writes when unserializing specially crafted
|
||||
strings). (Mike)
|
||||
. Fixed bug #60227 (header() cannot detect the multi-line header with
|
||||
CR(0x0D)). (rui)
|
||||
. Fixed bug #60174 (Notice when array in method prototype error).
|
||||
(Laruence)
|
||||
. Fixed bug #60169 (Conjunction of ternary and list crashes PHP).
|
||||
(Laruence)
|
||||
. Fixed bug #60038 (SIGALRM cause segfault in php_error_cb). (Laruence)
|
||||
- Core:
|
||||
. Fixed bug #60138 (GC crash with referenced array in RecursiveArrayIterator)
|
||||
(Dmitry).
|
||||
. Fixed bug #60099 (__halt_compiler() works in braced namespaces). (Felipe)
|
||||
. Fixed bug #55874 (GCC does not provide __sync_fetch_and_add on some archs).
|
||||
(klightspeed at netspace dot net dot au)
|
||||
. Fixed bug #55871 (Interruption in substr_replace()). (Stas)
|
||||
. Fixed bug #55801 (Behavior of unserialize has changed). (Mike)
|
||||
. Fixed bug #55758 (Digest Authenticate missed in 5.4) . (Laruence)
|
||||
. Fixed bug #55748 (multiple NULL Pointer Dereference with zend_strndup())
|
||||
(CVE-2011-4153). (Stas)
|
||||
. Fixed bug #55124 (recursive mkdir fails with current (dot) directory in path).
|
||||
(Pierre)
|
||||
. Fixed bug #55084 (Function registered by header_register_callback is
|
||||
called only once per process). (Hannes)
|
||||
. Implement FR #54514 (Get php binary path during script execution).
|
||||
(Laruence)
|
||||
. Fixed bug #52211 (iconv() returns part of string on error). (Felipe)
|
||||
. Fixed bug #51860 (Include fails with toplevel symlink to /). (Dmitry)
|
||||
. Fixed bug #52624 (tempnam() by-pass open_basedir with nonnexistent
|
||||
directory). (Felipe)
|
||||
. Fixed invalid free in call_user_method() function. (Felipe)
|
||||
|
||||
- Zend Engine:
|
||||
. Fixed bug #43200 (Interface implementation / inheritence not possible in
|
||||
abstract classes). (Felipe)
|
||||
|
||||
- Improved generic SAPI support:
|
||||
. Added $_SERVER['REQUEST_TIME_FLOAT'] to include microsecond precision.
|
||||
(Patrick)
|
||||
. Added header_register_callback() which is invoked immediately
|
||||
prior to the sending of headers and after default headers have
|
||||
been added. (Scott)
|
||||
. Added http_response_code() function. FR #52555. (Paul Dragoonis, Kalle)
|
||||
. Fixed bug #55500 (Corrupted $_FILES indices lead to security concern).
|
||||
(CVE-2012-1172). (Stas)
|
||||
. Fixed bug #54374 (Insufficient validating of upload name leading to
|
||||
corrupted $_FILES indices). (CVE-2012-1172). (Stas, lekensteyn at gmail dot com)
|
||||
- PHP-FPM SAPI:
|
||||
. Fixed bug #60179 (php_flag and php_value does not work properly). (fat)
|
||||
. Enhance error log when the primary script can't be open. FR #60199. (fat)
|
||||
. Added .phar to default authorized extensions. (fat)
|
||||
|
||||
- Improved CLI SAPI:
|
||||
. Added built-in web server that is intended for testing purpose.
|
||||
(Moriyoshi, Laruence, and fixes by Pierre, Derick, Arpad,
|
||||
chobieee at gmail dot com)
|
||||
. Added command line option --rz <name> which shows information of the
|
||||
named Zend extension. (Johannes)
|
||||
. Interactive readline shell improvements: (Johannes)
|
||||
. Added "cli.pager" php.ini setting to set a pager for output.
|
||||
. Added "cli.prompt" php.ini setting to configure the shell prompt.
|
||||
. Added shortcut #inisetting=value to change php.ini settings at run-time.
|
||||
. Changed shell not to terminate on fatal errors.
|
||||
. Interactive shell works with shared readline extension. FR #53878.
|
||||
- BCmath:
|
||||
. Fixed bug #60377 (bcscale related crashes on 64bits platforms). (shm)
|
||||
|
||||
- Improved CGI/FastCGI SAPI: (Dmitry)
|
||||
. Added apache compatible functions: apache_child_terminate(),
|
||||
getallheaders(), apache_request_headers() and apache_response_headers()
|
||||
. Improved performance of FastCGI request parsing.
|
||||
. Fixed reinitialization of SAPI callbacks after php_module_startup().
|
||||
(Dmitry)
|
||||
- Date:
|
||||
. Fixed bug #60373 (Startup errors with log_errors on cause segfault).
|
||||
(Derick)
|
||||
. Fixed bug #60236 (TLA timezone dates are not converted properly from
|
||||
timestamp). (Derick)
|
||||
. Fixed bug #55253 (DateTime::add() and sub() result -1 hour on objects with
|
||||
time zone type 2). (Derick)
|
||||
|
||||
- Improved PHP-FPM SAPI:
|
||||
. Removed EXPERIMENTAL flag. (fat)
|
||||
. Fixed bug #60659 (FPM does not clear auth_user on request accept).
|
||||
(bonbons at linux-vserver dot org)
|
||||
- EXIF:
|
||||
. Fixed bug #60150 (Integer overflow during the parsing of invalid exif
|
||||
header). (Stas, flolechaud at gmail dot com)
|
||||
|
||||
- Fileinfo:
|
||||
. Fixed possible memory leak in finfo_open(). (Felipe)
|
||||
. Fixed memory leak when calling the Finfo constructor twice. (Felipe)
|
||||
|
||||
- Improved Litespeed SAPI:
|
||||
. Fixed bug #55769 (Make Fails with "Missing Separator" error). (Adam)
|
||||
- Intl:
|
||||
. Fixed bug #60192 (SegFault when Collator not constructed
|
||||
properly). (Florian)
|
||||
. Fixed memory leak in several Intl locale functions. (Felipe)
|
||||
|
||||
- Improved Date extension:
|
||||
. Added the + modifier to parseFromFormat to allow trailing text in the
|
||||
string to parse without throwing an error. (Stas, Derick)
|
||||
- Gd:
|
||||
. Fixed bug #60160 (imagefill() doesn't work correctly
|
||||
for small images). (Florian)
|
||||
|
||||
- Mbstring:
|
||||
. Fixed possible crash in mb_ereg_search_init() using empty pattern. (Felipe)
|
||||
|
||||
- MS SQL:
|
||||
. Fixed bug #60267 (Compile failure with freetds 0.91). (Felipe)
|
||||
|
||||
- Improved DBA extension:
|
||||
. Added Tokyo Cabinet abstract DB support. (Michael Maclean)
|
||||
. Added Berkeley DB 5 support. (Johannes, Chris Jones)
|
||||
- OpenSSL:
|
||||
. Fixed bug #60279 (Fixed NULL pointer dereference in
|
||||
stream_socket_enable_crypto, case when ssl_handle of session_stream is not
|
||||
initialized.) (shm)
|
||||
|
||||
- Improved DOM extension:
|
||||
. Added the ability to pass options to loadHTML (Chregu, fxmulder at gmail dot com)
|
||||
- Oracle Database extension (OCI8):
|
||||
. Fixed bug #59985 (show normal warning text for OCI_NO_DATA).
|
||||
(Chris Jones)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #60261 (NULL pointer dereference in phar). (Felipe)
|
||||
. Fixed bug #60164 (Stubs of a specific length break phar_open_from_fp
|
||||
scanning for __HALT_COMPILER). (Ralph Schindler)
|
||||
|
||||
- Improved filesystem functions:
|
||||
. scandir() now accepts SCANDIR_SORT_NONE as a possible sorting_order value.
|
||||
FR #53407. (Adam)
|
||||
- Postgres:
|
||||
. Fixed bug #60244 (pg_fetch_* functions do not validate that row param
|
||||
is >0). (Ilia)
|
||||
|
||||
- Improved HASH extension:
|
||||
. Added Jenkins's one-at-a-time hash support. (Martin Jansen)
|
||||
. Added FNV-1 hash support. (Michael Maclean)
|
||||
. Made Adler32 algorithm faster. FR #53213. (zavasek at yandex dot ru)
|
||||
. Removed Salsa10/Salsa20, which are actually stream ciphers (Mike)
|
||||
. Fixed bug #60221 (Tiger hash output byte order) (Mike)
|
||||
|
||||
- Improved intl extension:
|
||||
. Added Spoofchecker class, allows checking for visibly confusable characters and
|
||||
other security issues. (Scott)
|
||||
. Added Transliterator class, allowing transliteration of strings.
|
||||
(Gustavo)
|
||||
. Added support for UTS #46. (Gustavo)
|
||||
. Fixed build on Fedora 15 / Ubuntu 11. (Hannes)
|
||||
. Fixed bug #55562 (grapheme_substr() returns false on big length). (Stas)
|
||||
|
||||
- Improved JSON extension:
|
||||
. Added new json_encode() option JSON_UNESCAPED_UNICODE. FR #53946.
|
||||
(Alexander, Gwynne)
|
||||
. Added JsonSerializable interface. (Sara)
|
||||
. Added JSON_BIGINT_AS_STRING, extended json_decode() sig with $options.
|
||||
(Sara)
|
||||
. Added support for JSON_NUMERIC_CHECK option in json_encode() that converts
|
||||
numeric strings to integers. (Ilia)
|
||||
. Added new json_encode() option JSON_UNESCAPED_SLASHES. FR #49366. (Adam)
|
||||
. Added new json_encode() option JSON_PRETTY_PRINT. FR #44331. (Adam)
|
||||
|
||||
- Improved LDAP extension:
|
||||
. Added paged results support. FR #42060. (ando@OpenLDAP.org,
|
||||
iarenuno@eteo.mondragon.edu, jeanseb@au-fil-du.net, remy.saissy@gmail.com)
|
||||
|
||||
- Improved mbstring extension:
|
||||
. Added Shift_JIS/UTF-8 Emoji (pictograms) support. (Rui)
|
||||
. Added JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004)
|
||||
support. (Rui)
|
||||
. Ill-formed UTF-8 check for security enhancements. (Rui)
|
||||
. Added MacJapanese (Shift_JIS) and gb18030 encoding support. (Rui)
|
||||
. Added encode/decode in hex format to mb_[en|de]code_numericentity(). (Rui)
|
||||
. Added user JIS X0213:2004 (Shift_JIS-2004, EUC-JP-2004, ISO-2022-JP-2004)
|
||||
support. (Rui)
|
||||
. Added the user defined area for CP936 and CP950 (Rui).
|
||||
. Fixed bug #60306 (Characters lost while converting from cp936 to utf8).
|
||||
(Laruence)
|
||||
|
||||
- Improved MySQL extensions:
|
||||
. MySQL: Deprecated mysql_list_dbs(). FR #50667. (Andrey)
|
||||
. mysqlnd: Added named pipes support. FR #48082. (Andrey)
|
||||
. MySQLi: Added iterator support in MySQLi. mysqli_result implements
|
||||
Traversable. (Andrey, Johannes)
|
||||
. PDO_mysql: Removed support for linking with MySQL client libraries older
|
||||
than 4.1. (Johannes)
|
||||
. ext/mysql, mysqli and pdo_mysql now use mysqlnd by default. (Johannes)
|
||||
. Fixed bug #55473 (mysql_pconnect leaks file descriptors on reconnect).
|
||||
(Andrey, Laruence)
|
||||
. Fixed bug #55653 (PS crash with libmysql when binding same variable as
|
||||
param and out). (Laruence)
|
||||
|
||||
- Improved OpenSSL extension:
|
||||
. Added AES support. FR #48632. (yonas dot y at gmail dot com, Pierre)
|
||||
. Added no padding option to openssl_encrypt()/openssl_decrypt(). (Scott)
|
||||
. Use php's implementation for Windows Crypto API in
|
||||
openssl_random_pseudo_bytes. (Pierre)
|
||||
. On error in openssl_random_pseudo_bytes() made sure we set strong result
|
||||
to false. (Scott)
|
||||
. Fixed possible attack in SSL sockets with SSL 3.0 / TLS 1.0.
|
||||
CVE-2011-3389. (Scott)
|
||||
. Fixed bug #61124 (Crash when decoding an invalid base64 encoded string).
|
||||
(me at ktamura dot com, Scott)
|
||||
|
||||
- Improved PDO:
|
||||
. Fixed PDO objects binary incompatibility. (Dmitry)
|
||||
|
||||
- PDO DBlib driver:
|
||||
. Added nextRowset support.
|
||||
. Fixed bug #50755 (PDO DBLIB Fails with OOM).
|
||||
|
||||
- Improved PostgreSQL extension:
|
||||
. Added support for "extra" parameter for PGNotify().
|
||||
(r dot i dot k at free dot fr, Ilia)
|
||||
|
||||
- Improved PCRE extension:
|
||||
. Changed third parameter of preg_match_all() to optional. FR #53238. (Adam)
|
||||
|
||||
- Improved Readline extension:
|
||||
. Fixed bug #54450 (Enable callback support when built against libedit).
|
||||
(fedora at famillecollet dot com, Hannes)
|
||||
|
||||
- Improved Reflection extension:
|
||||
. Added ReflectionClass::newInstanceWithoutConstructor() to create a new
|
||||
instance of a class without invoking its constructor. FR #55490.
|
||||
(Sebastian)
|
||||
. Added ReflectionExtension::isTemporary() and
|
||||
ReflectionExtension::isPersistent() methods. (Johannes)
|
||||
. Added ReflectionZendExtension class. (Johannes)
|
||||
. Added ReflectionClass::isCloneable(). (Felipe)
|
||||
|
||||
- Improved Session extension:
|
||||
. Expose session status via new function, session_status (FR #52982) (Arpad)
|
||||
. Added support for object-oriented session handlers. (Arpad)
|
||||
. Added support for storing upload progress feedback in session data. (Arnaud)
|
||||
. Changed session.entropy_file to default to /dev/urandom or /dev/arandom if
|
||||
either is present at compile time. (Rasmus)
|
||||
. Fixed bug #60860 (session.save_handler=user without defined function core
|
||||
dumps). (Felipe)
|
||||
. Implement FR #60551 (session_set_save_handler should support a core's
|
||||
session handler interface). (Arpad)
|
||||
. Fixed bug #60640 (invalid return values). (Arpad)
|
||||
|
||||
- Improved SNMP extension (Boris Lytochkin):
|
||||
. Added OO API. FR #53594 (php-snmp rewrite).
|
||||
. Sanitized return values of existing functions. Now it returns FALSE on
|
||||
failure.
|
||||
. Allow ~infinite OIDs in GET/GETNEXT/SET queries. Autochunk them to max_oids
|
||||
upon request.
|
||||
. Introducing unit tests for extension with ~full coverage.
|
||||
. IPv6 support. (FR #42918)
|
||||
. Way of representing OID value can now be changed when SNMP_VALUE_OBJECT
|
||||
is used for value output mode. Use or'ed SNMP_VALUE_LIBRARY(default if
|
||||
not specified) or SNMP_VALUE_PLAIN. (FR #54502)
|
||||
. Fixed bug #60749 (SNMP module should not strip non-standard SNMP port
|
||||
from hostname). (Boris Lytochkin)
|
||||
. Fixed bug #60585 (php build fails with USE flag snmp when IPv6 support
|
||||
is disabled). (Boris Lytochkin)
|
||||
. Fixed bug #53862 (snmp_set_oid_output_format does not allow returning to default)
|
||||
. Fixed bug #46065 (snmp_set_quick_print() persists between requests)
|
||||
. Fixed bug #45893 (Snmp buffer limited to 2048 char)
|
||||
. Fixed bug #44193 (snmp v3 noAuthNoPriv doesn't work)
|
||||
|
||||
- Improved SOAP extension:
|
||||
. Added new SoapClient option "keep_alive". FR #60329. (Pierrick)
|
||||
. Fixed basic HTTP authentication for WSDL sub requests. (Dmitry)
|
||||
|
||||
- Improved SPL extension:
|
||||
. Added RegexIterator::getRegex() method. (Joshua Thijssen)
|
||||
. Added SplObjectStorage::getHash() hook. (Etienne)
|
||||
. Added CallbackFilterIterator and RecursiveCallbackFilterIterator. (Arnaud)
|
||||
. Added missing class_uses(..) as pointed out by #55266 (Stefan)
|
||||
. Immediately reject wrong usages of directories under Spl(Temp)FileObject
|
||||
and friends. (Etienne, Pierre)
|
||||
. FilesystemIterator, GlobIterator and (Recursive)DirectoryIterator now use
|
||||
the default stream context. (Hannes)
|
||||
. Fixed bug #60201 (SplFileObject::setCsvControl does not expose third
|
||||
argument via Reflection). (Peter)
|
||||
. Fixed bug #55287 (spl_classes() not includes CallbackFilter classes)
|
||||
(sasezaki at gmail dot com, salathe)
|
||||
|
||||
- Improved Sysvshm extension:
|
||||
. Fixed bug #55750 (memory copy issue in sysvshm extension).
|
||||
(Ilia, jeffhuang9999 at gmail dot com)
|
||||
|
||||
- Improved Tidy extension:
|
||||
- SOAP
|
||||
. Fixed bug #48216 (PHP Fatal error: SOAP-ERROR: Parsing WSDL:
|
||||
Extra content at the end of the doc, when server uses chunked transfer
|
||||
encoding with spaces after chunk size). (Dmitry)
|
||||
. Fixed bug #44686 (SOAP-ERROR: Parsing WSDL with references). (Dmitry)
|
||||
|
||||
- Tidy:
|
||||
. Fixed bug #54682 (Tidy::diagnose() NULL pointer dereference).
|
||||
(Maksymilian Arciemowicz, Felipe)
|
||||
|
||||
- Improved Tokenizer extension:
|
||||
. Fixed bug #54089 (token_get_all with regards to __halt_compiler is
|
||||
not binary safe). (Nikita Popov)
|
||||
- Reflection:
|
||||
. Fixed bug #60367 (Reflection and Late Static Binding). (Laruence)
|
||||
|
||||
- Improved XSL extension:
|
||||
. Added XsltProcessor::setSecurityPrefs($options) and getSecurityPrefs() to
|
||||
define forbidden operations within XSLT stylesheets, default is not to
|
||||
enable write operations from XSLT. Bug #54446 (Chregu, Nicolas Gregoire)
|
||||
. XSL doesn't stop transformation anymore, if a PHP function can't be called
|
||||
(Christian)
|
||||
|
||||
- Improved ZLIB extension:
|
||||
. Re-implemented non-file related functionality. (Mike)
|
||||
. Fixed bug #55544 (ob_gzhandler always conflicts with zlib.output_compression).
|
||||
(Mike)
|
||||
|
||||
02 Feb 2012, PHP 5.3.10
|
||||
03 Nov 2011, PHP 5.3.9RC1
|
||||
|
||||
- Core:
|
||||
. Fixed arbitrary remote code execution vulnerability reported by Stefan
|
||||
Esser, CVE-2012-0830. (Stas, Dmitry)
|
||||
|
||||
10 Jan 2012, PHP 5.3.9
|
||||
|
||||
- Core:
|
||||
. Added max_input_vars directive to prevent attacks based on hash collisions
|
||||
(CVE-2011-4885) (Dmitry).
|
||||
. Fixed bug #60205 (possible integer overflow in content_length). (Laruence)
|
||||
. Fixed bug #60139 (Anonymous functions create cycles not detected by the
|
||||
GC). (Dmitry)
|
||||
. Fixed bug #60138 (GC crash with referenced array in RecursiveArrayIterator)
|
||||
(Dmitry).
|
||||
. Fixed bug #60120 (proc_open's streams may hang with stdin/out/err when
|
||||
the data exceeds or is equal to 2048 bytes). (Pierre, Pascal Borreli)
|
||||
. Fixed bug #60099 (__halt_compiler() works in braced namespaces). (Felipe)
|
||||
. Fixed bug #60019 (Function time_nanosleep() is undefined on OS X). (Ilia)
|
||||
. Fixed bug #55874 (GCC does not provide __sync_fetch_and_add on some archs).
|
||||
(klightspeed at netspace dot net dot au)
|
||||
. Fixed bug #55798 (serialize followed by unserialize with numeric object
|
||||
prop. gives integer prop). (Gustavo)
|
||||
. Fixed bug #55749 (TOCTOU issue in getenv() on Windows builds). (Pierre)
|
||||
@@ -608,84 +143,26 @@ PHP NEWS
|
||||
. Fixed bug #55366 (keys lost when using substr_replace an array). (Arpad)
|
||||
. Fixed bug #55273 (base64_decode() with strict rejects whitespace after
|
||||
pad). (Ilia)
|
||||
. Fixed bug #52624 (tempnam() by-pass open_basedir with nonnexistent
|
||||
directory). (Felipe)
|
||||
. Fixed bug #50982 (incorrect assumption of PAGE_SIZE size). (Dmitry)
|
||||
. Fixed invalid free in call_user_method() function. (Felipe)
|
||||
. Fixed bug #43200 (Interface implementation / inheritence not possible in
|
||||
abstract classes). (Felipe)
|
||||
|
||||
|
||||
- BCmath:
|
||||
. Fixed bug #60377 (bcscale related crashes on 64bits platforms). (shm)
|
||||
|
||||
- Calendar:
|
||||
. Fixed bug #55797 (Integer overflow in SdnToGregorian leads to segfault (in
|
||||
optimized builds). (Gustavo)
|
||||
|
||||
- cURL:
|
||||
. Fixed bug #60439 (curl_copy_handle segfault when used with
|
||||
CURLOPT_PROGRESSFUNCTION). (Pierrick)
|
||||
- Curl:
|
||||
. Fixed bug #54798 (Segfault when CURLOPT_STDERR file pointer is closed
|
||||
before calling curl_exec). (Hannes)
|
||||
. Fixed issues were curl_copy_handle() would sometimes lose copied
|
||||
preferences. (Hannes)
|
||||
|
||||
- DateTime:
|
||||
. Fixed bug #60373 (Startup errors with log_errors on cause segfault).
|
||||
(Derick)
|
||||
. Fixed bug #60236 (TLA timezone dates are not converted properly from
|
||||
timestamp). (Derick)
|
||||
. Fixed bug #55253 (DateTime::add() and sub() result -1 hour on objects with
|
||||
time zone type 2). (Derick)
|
||||
. Fixed bug #54851 (DateTime::createFromFormat() doesn't interpret "D").
|
||||
(Derick)
|
||||
. Fixed bug #53502 (strtotime with timezone memory leak). (Derick)
|
||||
. Fixed bug #52062 (large timestamps with DateTime::getTimestamp and
|
||||
DateTime::setTimestamp). (Derick)
|
||||
. Fixed bug #51994 (date_parse_from_format is parsing invalid date using 'yz'
|
||||
format). (Derick)
|
||||
. Fixed bug #52113 (Seg fault while creating (by unserialization)
|
||||
DatePeriod). (Derick)
|
||||
. Fixed bug #48476 (cloning extended DateTime class without calling
|
||||
parent::__constr crashed PHP). (Hannes)
|
||||
|
||||
- EXIF:
|
||||
. Fixed bug #60150 (Integer overflow during the parsing of invalid exif
|
||||
header). (CVE-2011-4566) (Stas, flolechaud at gmail dot com)
|
||||
|
||||
- Fileinfo:
|
||||
. Fixed bug #60094 (C++ comment fails in c89). (Laruence)
|
||||
. Fixed possible memory leak in finfo_open(). (Felipe)
|
||||
. Fixed memory leak when calling the Finfo constructor twice. (Felipe)
|
||||
|
||||
- Filter:
|
||||
. Fixed Bug #55478 (FILTER_VALIDATE_EMAIL fails with internationalized
|
||||
domain name addresses containing >1 -). (Ilia)
|
||||
|
||||
- FTP:
|
||||
. Fixed bug #60183 (out of sync ftp responses). (bram at ebskamp dot me,
|
||||
rasmus)
|
||||
|
||||
- Gd:
|
||||
. Fixed bug #60160 (imagefill() doesn't work correctly
|
||||
for small images). (Florian)
|
||||
|
||||
- Intl:
|
||||
. Fixed bug #60192 (SegFault when Collator not constructed
|
||||
properly). (Florian)
|
||||
. Fixed memory leak in several Intl locale functions. (Felipe)
|
||||
|
||||
- Json:
|
||||
. Fixed bug #55543 (json_encode() with JSON_NUMERIC_CHECK fails on objects
|
||||
with numeric string properties). (Ilia, dchurch at sciencelogic dot com)
|
||||
|
||||
- Mbstring:
|
||||
. Fixed possible crash in mb_ereg_search_init() using empty pattern. (Felipe)
|
||||
|
||||
- MS SQL:
|
||||
. Fixed bug #60267 (Compile failure with freetds 0.91). (Felipe)
|
||||
|
||||
- MySQL:
|
||||
. Fixed bug #55550 (mysql.trace_mode miscounts result sets). (Johannes)
|
||||
|
||||
@@ -701,19 +178,7 @@ PHP NEWS
|
||||
. Fixed bug #55067 (MySQL doesn't support compression - wrong config option).
|
||||
(Andrey)
|
||||
|
||||
- NSAPI SAPI:
|
||||
. Don't set $_SERVER['HTTPS'] on unsecure connection (bug #55403). (Uwe
|
||||
Schindler)
|
||||
|
||||
- OpenSSL:
|
||||
. Fixed bug #60279 (Fixed NULL pointer dereference in
|
||||
stream_socket_enable_crypto, case when ssl_handle of session_stream is not
|
||||
initialized.) (shm)
|
||||
. Fix segfault with older versions of OpenSSL. (Scott)
|
||||
|
||||
- Oracle Database extension (OCI8):
|
||||
. Fixed bug #59985 (show normal warning text for OCI_NO_DATA).
|
||||
(Chris Jones)
|
||||
. Increased maximum Oracle error message buffer length for new 11.2.0.3 size.
|
||||
(Chris Jones)
|
||||
. Improve internal initalization failure error messages. (Chris Jones)
|
||||
@@ -721,13 +186,6 @@ PHP NEWS
|
||||
- PDO
|
||||
. Fixed bug #55776 (PDORow to session bug). (Johannes)
|
||||
|
||||
- PDO Firebird:
|
||||
. Fixed bug #48877 ("bindValue" and "bindParam" do not work for PDO Firebird).
|
||||
(Mariuz)
|
||||
. Fixed bug #47415 (PDO_Firebird segfaults when passing lowercased column name to bindColumn).
|
||||
. Fixed bug #53280 (PDO_Firebird segfaults if query column count less than param count).
|
||||
(Mariuz)
|
||||
|
||||
- PDO MySQL driver:
|
||||
. Fixed bug #60155 (pdo_mysql.default_socket ignored). (Johannes)
|
||||
. Fixed bug #55870 (PDO ignores all SSL parameters when used with mysql
|
||||
@@ -740,61 +198,42 @@ PHP NEWS
|
||||
killed). (mikhail dot v dot gavrilov at gmail dot com, Chris Jones, Tony)
|
||||
|
||||
- Phar:
|
||||
. Fixed bug #60261 (NULL pointer dereference in phar). (Felipe)
|
||||
. Fixed bug #60164 (Stubs of a specific length break phar_open_from_fp
|
||||
scanning for __HALT_COMPILER). (Ralph Schindler)
|
||||
. Fixed bug #53872 (internal corruption of phar). (Hannes)
|
||||
. Fixed bug #52013 (Unable to decompress files in a compressed phar). (Hannes)
|
||||
. Fixed bug #53872 (internal corruption of phar). (Hannes)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Dropped restriction of not setting the same value multiple times, the last
|
||||
one holds. (giovanni at giacobbi dot net, fat)
|
||||
. Added .phar to default authorized extensions. (fat)
|
||||
. Fixed bug #60659 (FPM does not clear auth_user on request accept).
|
||||
(bonbons at linux-vserver dot org)
|
||||
. Fixed bug #60629 (memory corruption when web server closed the fcgi fd).
|
||||
(fat)
|
||||
. Enhance error log when the primary script can't be open. FR #60199. (fat)
|
||||
. Fixed bug #60179 (php_flag and php_value does not work properly). (fat)
|
||||
. Fixed bug #55577 (status.html does not install). (fat)
|
||||
. Fixed bug #55533 (The -d parameter doesn't work). (fat)
|
||||
. Fixed bug #55526 (Heartbeat causes a lot of unnecessary events). (fat)
|
||||
. Fixed bug #55533 (The -d parameter doesn't work). (fat)
|
||||
. Implemented FR #52569 (Add the "ondemand" process-manager
|
||||
to allow zero children). (fat)
|
||||
. Fixed bug #55486 (status show BIG processes number). (fat)
|
||||
. Enhanced security by limiting access to user defined extensions.
|
||||
FR #55181. (fat)
|
||||
. Added process.max to control the number of process FPM can fork. FR #55166.
|
||||
(fat)
|
||||
. Fixed bug #55577 (status.html does not install). (fat)
|
||||
. Backported from 5.4 branch (Dropped restriction of not setting the same
|
||||
value multiple times, the last one holds).
|
||||
(giovanni at giacobbi dot net, fat)
|
||||
. Backported FR #55166 from 5.4 branch (Added process.max to control
|
||||
the number of process FPM can fork). (fat)
|
||||
. Backported FR #55181 from 5.4 branch (Enhance security by limiting access
|
||||
to user defined extensions). (fat)
|
||||
. Backported FR #54098 from 5.4 branch (Lowered process manager
|
||||
default value). (fat)
|
||||
. Backported FR #52052 from 5.4 branch (Added partial syslog support). (fat)
|
||||
. Implemented FR #54577 (Enhanced status page with full status and details
|
||||
about each processes. Also provide a web page (status.html) for
|
||||
real-time FPM status. (fat)
|
||||
. Lowered default value for Process Manager. FR #54098. (fat)
|
||||
. Implemented FR #52569 (Add the "ondemand" process-manager
|
||||
to allow zero children). (fat)
|
||||
. Added partial syslog support (on error_log only). FR #52052. (fat)
|
||||
|
||||
- Postgres:
|
||||
. Fixed bug #60244 (pg_fetch_* functions do not validate that row param
|
||||
is >0). (Ilia)
|
||||
|
||||
- Reflection:
|
||||
. Fixed bug #60367 (Reflection and Late Static Binding). (Laruence)
|
||||
|
||||
- Session:
|
||||
. Fixed bug #55267 (session_regenerate_id fails after header sent). (Hannes)
|
||||
|
||||
- NSAPI SAPI:
|
||||
. Don't set $_SERVER['HTTPS'] on unsecure connection (bug #55403). (Uwe
|
||||
Schindler)
|
||||
|
||||
- SimpleXML:
|
||||
. Reverted the SimpleXML->query() behaviour to returning empty arrays
|
||||
instead of false when no nodes are found as it was since 5.3.3
|
||||
(bug #48601). (chregu, rrichards)
|
||||
|
||||
- SOAP
|
||||
. Fixed bug #54911 (Access to a undefined member in inherit SoapClient may
|
||||
cause Segmentation Fault). (Dmitry)
|
||||
. Fixed bug #48216 (PHP Fatal error: SOAP-ERROR: Parsing WSDL:
|
||||
Extra content at the end of the doc, when server uses chunked transfer
|
||||
encoding with spaces after chunk size). (Dmitry)
|
||||
. Fixed bug #44686 (SOAP-ERROR: Parsing WSDL with references). (Dmitry)
|
||||
|
||||
- Sockets:
|
||||
. Fixed bug #60048 (sa_len a #define on IRIX). (china at thewrittenword dot
|
||||
com)
|
||||
@@ -806,21 +245,24 @@ PHP NEWS
|
||||
(jgotti at modedemploi dot fr, Hannes)
|
||||
. Fixed bug #54304 (RegexIterator::accept() doesn't work with scalar values).
|
||||
(Hannes)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #60455 (stream_get_line misbehaves if EOF is not detected together
|
||||
with the last read). (Gustavo)
|
||||
|
||||
- Tidy:
|
||||
. Fixed bug #54682 (Tidy::diagnose() NULL pointer dereference).
|
||||
(Maksymilian Arciemowicz, Felipe)
|
||||
|
||||
|
||||
- XSL:
|
||||
. Added xsl.security_prefs ini option to define forbidden operations within
|
||||
XSLT stylesheets, default is not to enable write operations. This option
|
||||
won't be in 5.4, since there's a new method. Fixes Bug #54446. (Chregu,
|
||||
Nicolas Gregoire)
|
||||
|
||||
- Fileinfo:
|
||||
. Fixed bug #60094 (C++ comment fails in c89). (Laruence)
|
||||
|
||||
- FTP:
|
||||
. Fixed bug #60183 (out of sync ftp responses). (bram at ebskamp dot me,
|
||||
rasmus)
|
||||
|
||||
- SAPI:
|
||||
. Fixed bug #60205 (possible integer overflow in content_length). (Laruence)
|
||||
|
||||
|
||||
23 Aug 2011, PHP 5.3.8
|
||||
|
||||
- Core:
|
||||
@@ -1312,7 +754,7 @@ PHP NEWS
|
||||
|
||||
- Tokenizer Extension
|
||||
. Fixed bug #54089 (token_get_all() does not stop after __halt_compiler).
|
||||
(Nikita Popov, Ilia)
|
||||
(Ilia)
|
||||
|
||||
- XSL extension:
|
||||
. Fixed memory leaked introduced by the NULL poisoning patch.
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
$Id: README.NEW-OUTPUT-API 219039 2006-08-30 07:39:09Z mike $
|
||||
|
||||
|
||||
API adjustment to the old output control code:
|
||||
|
||||
Everything now resides beneath the php_output namespace,
|
||||
and there's an API call for every output handler op.
|
||||
|
||||
Checking output control layers status:
|
||||
// Using OG()
|
||||
php_output_get_status(TSRMLS_C);
|
||||
|
||||
Starting the default output handler:
|
||||
// php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
|
||||
php_output_start_default(TSRMLS_C);
|
||||
|
||||
Starting an user handler by zval:
|
||||
// php_start_ob_buffer(zhandler, chunk_size, erase TSRMLS_CC);
|
||||
php_output_start_user(zhandler, chunk_size, flags TSRMLS_CC);
|
||||
|
||||
Starting an internal handler whithout context:
|
||||
// php_ob_set_internal_handler(my_php_output_handler_func_t, buffer_size, "output handler name", erase TSRMLS_CC);
|
||||
php_output_start_internal(handler_name, handler_name_len, my_php_output_handler_func_t, chunk_size, flags TSRMLS_CC);
|
||||
|
||||
Starting an internal handler with context:
|
||||
// not possible with old API
|
||||
php_output_handler *h;
|
||||
h = php_output_handler_create_internal(handler_name, handler_name_len, my_php_output_handler_context_func_t, chunk_size, flags TSRMLS_CC);
|
||||
php_output_handler_set_context(h, my_context, my_context_dtor);
|
||||
php_output_handler_start(h TSRMLS_CC);
|
||||
|
||||
Testing whether a certain output handler has already been started:
|
||||
// php_ob_handler_used("output handler name" TSRMLS_CC);
|
||||
php_output_handler_started(handler_name, handler_name_len TSRMLS_CC);
|
||||
|
||||
Flushing one output buffer:
|
||||
// php_ob_end_buffer(1, 1 TSRMLS_CC);
|
||||
php_output_flush(TSRMLS_C);
|
||||
|
||||
Flushing all output buffers:
|
||||
// not possible with old API
|
||||
php_output_flush_all(TSRMLS_C);
|
||||
|
||||
Cleaning one output buffer:
|
||||
// php_ob_end_buffer(0, 1 TSRMLS_CC);
|
||||
php_output_clean(TSRMLS_C);
|
||||
|
||||
Cleaning all output buffers:
|
||||
// not possible with old API
|
||||
php_output_clean_all(TSRMLS_C);
|
||||
|
||||
Discarding one output buffer:
|
||||
// php_ob_end_buffer(0, 0 TSRMLS_CC);
|
||||
php_output_discard(TSRMLS_C);
|
||||
|
||||
Discarding all output buffers:
|
||||
// php_ob_end_buffers(0 TSRMLS_CC);
|
||||
php_output_discard_all(TSRMLS_C);
|
||||
|
||||
Stopping (and dropping) one output buffer:
|
||||
// php_ob_end_buffer(1, 0 TSRMLS_CC)
|
||||
php_output_end(TSRMLS_C);
|
||||
|
||||
Stopping (and dropping) all output buffers:
|
||||
// php_ob_end_buffers(1, 0 TSRMLS_CC);
|
||||
php_output_end_all(TSRMLS_C);
|
||||
|
||||
Retrieving output buffers contents:
|
||||
// php_ob_get_buffer(zstring TSRMLS_CC);
|
||||
php_output_get_contents(zstring TSRMLS_CC);
|
||||
|
||||
Retrieving output buffers length:
|
||||
// php_ob_get_length(zlength TSRMLS_CC);
|
||||
php_output_get_length(zlength TSRMLS_CC);
|
||||
|
||||
Retrieving output buffering level:
|
||||
// OG(nesting_level);
|
||||
php_output_get_level(TSRMLS_C);
|
||||
|
||||
Issue a warning because of an output handler conflict:
|
||||
// php_ob_init_conflict("to be started handler name", "to be tested if already started handler name" TSRMLS_CC);
|
||||
php_output_handler_conflict(new_handler_name, new_handler_name_len, set_handler_name, set_handler_name_len TSRMLS_CC);
|
||||
|
||||
Registering a conflict checking function, which will be checked prior starting the handler:
|
||||
// not possible with old API, unless hardcoding into output.c
|
||||
php_output_handler_conflict_register(handler_name, handler_name_len, my_php_output_handler_conflict_check_t TSRMLS_CC);
|
||||
|
||||
Registering a reverse conflict checking function, which will be checked prior starting the specified foreign handler:
|
||||
// not possible with old API
|
||||
php_output_handler_reverse_conflict_register(foreign_handler_name, foreign_handler_name_len, my_php_output_handler_conflict_check_t TSRMLS_CC);
|
||||
|
||||
Facilitating a context from within an output handler callable with ob_start():
|
||||
// not possible with old API
|
||||
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ, (void *) &custom_ctx_ptr_ptr TSRMLS_CC);
|
||||
|
||||
Disabling of the output handler by itself:
|
||||
//not possible with old API
|
||||
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_DISABLE, NULL TSRMLS_CC);
|
||||
|
||||
Marking an output handler immutable by itself because of irreversibility of its operation:
|
||||
// not possible with old API
|
||||
php_output_handler_hook(PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE, NULL TSRMLS_CC);
|
||||
|
||||
Restarting the output handler because of a CLEAN operation:
|
||||
// not possible with old API
|
||||
if (flags & PHP_OUTPUT_HANDLER_CLEAN) { ... }
|
||||
|
||||
Recognizing by the output handler itself if it gets discarded:
|
||||
// not possible with old API
|
||||
if ((flags & PHP_OUTPUT_HANDLER_CLEAN) && (flags & PHP_OUTPUT_HANDLER_FINAL)) { ... }
|
||||
|
||||
|
||||
Output handler hooks
|
||||
|
||||
The output handler can change its abilities at runtime. Eg. the gz handler can
|
||||
remove the CLEANABLE and REMOVABLE bits when the first output has passed through it;
|
||||
or handlers implemented in C to be used with ob_start() can contain a non-global
|
||||
context:
|
||||
PHP_OUTPUT_HANDLER_HOOK_GET_OPAQ
|
||||
pass a void*** pointer as second arg to receive the address of a pointer
|
||||
pointer to the opaque field of the output handler context
|
||||
PHP_OUTPUT_HANDLER_HOOK_GET_FLAGS
|
||||
pass a int* pointer as second arg to receive the flags set for the output handler
|
||||
PHP_OUTPUT_HANDLER_HOOK_GET_LEVEL
|
||||
pass a int* pointer as second arg to receive the level of this output handler
|
||||
(starts with 0)
|
||||
PHP_OUTPUT_HANDLER_HOOK_IMMUTABLE
|
||||
the second arg is ignored; marks the output handler to be neither cleanable
|
||||
nor removable
|
||||
PHP_OUTPUT_HANDLER_HOOK_DISABLE
|
||||
the second arg is ignored; marks the output handler as disabled
|
||||
|
||||
|
||||
Open questions
|
||||
|
||||
Should the userland API be adjusted and unified?
|
||||
|
||||
Many bits of the manual (and very first implementation) do not comply
|
||||
with the behaviour of the current (to be obsoleted) code, thus should
|
||||
the manual or the behaviour be adjusted?
|
||||
|
||||
END
|
||||
@@ -51,7 +51,6 @@ Type specifiers
|
||||
L - long, limits out-of-range numbers to LONG_MAX/LONG_MIN (long)
|
||||
o - object of any type (zval*)
|
||||
O - object of specific type given by class entry (zval*, zend_class_entry)
|
||||
p - valid path (string without null bytes in the middle) and its length (char*, int)
|
||||
r - resource (zval*)
|
||||
s - string (with possible null bytes) and its length (char*, int)
|
||||
z - the actual zval (zval*)
|
||||
|
||||
+42
-37
@@ -20,18 +20,12 @@ php/QA/bug websites try to have someone from the webmaster team (Bjori) on hand.
|
||||
|
||||
5. Verify the tags to be extra sure everything was tagged properly.
|
||||
|
||||
6. Moving extensions from/to PECL requires write acces to the destination.
|
||||
Most developers should have this.
|
||||
6. Moving extensions from/to PECL requires root level access to the CVS server.
|
||||
Contact systems@php.net to get this taken care of.
|
||||
|
||||
Moving extensions from php-src to PECL
|
||||
- Checkout the pecl directory, most likely you want a sparse-root checkout
|
||||
svn co --depth=empty https://svn.php.net/repository/pecl
|
||||
- Create an directory for the extension incl. branch and tag structure,
|
||||
no trunk at this point and commit this to svn
|
||||
cd pecl; mkdir foo foo/tags foo/branches; svn add foo; svn commit
|
||||
- Move the extension from php-src to the new location
|
||||
svn mv https://svn.php.net/repository/php/php-src/trunk/ext/foo \
|
||||
https://svn.php.net/repository/pecl/foo/trunk
|
||||
- Filesystem: cp -r php-src/ext/foo pecl/foo
|
||||
- cvs rm php-src/ext/foo
|
||||
|
||||
If the extension is still usable or not dead, in cooperation with the extension
|
||||
maintainers if any:
|
||||
@@ -39,41 +33,51 @@ maintainers if any:
|
||||
- create the package.xml, commit
|
||||
- release the package
|
||||
|
||||
For Moving extensions from PECL to php-src the svn mv has to be tone the other
|
||||
way round.
|
||||
Moving extensions from PECL to php-src
|
||||
- Filesystem: cp -r pecl/foo php-src/ext/foo
|
||||
OR depending on the wishes from the PECL extension maintainer.
|
||||
- Filesystem: ln -s pecl/foo php-src/ext/foo
|
||||
|
||||
Rolling a non stable release (alpha/beta/RC)
|
||||
--------------------------------------------
|
||||
|
||||
1. Check windows snapshot builder logs (http://windows.php.net/downloads/snaps/ the last revision)
|
||||
1. Check windows snapshot builder logs (http://snaps.php.net/win32/snapshot-STABLE.log f.e.)
|
||||
|
||||
2. run the "scripts/dev/credits" script in php-src and commit the changes in the
|
||||
credits files in ext/standard.
|
||||
|
||||
3. Checkout the release branch for this release (e.g., PHP-5.4.2).
|
||||
|
||||
4. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and possibly ``NEWS``.
|
||||
2. Bump the version numbers in ``main/php_version.h``, ``configure.in`` and possibly ``NEWS``.
|
||||
Do not use abbreviations for alpha and beta.
|
||||
|
||||
5. Commit these changes to the branch with ``git commit -a``.
|
||||
3. Commit those changes
|
||||
|
||||
6. Tag the repository with the version, e.g.:
|
||||
``git tag -u YOURKEYID PHP-5.4.2-RC2``
|
||||
4. run the "scripts/dev/credits" script in php-src and commit the changes in the
|
||||
credits files in ext/standard.
|
||||
|
||||
7. Push the changes to the main repo:
|
||||
``git push --tags origin HEAD``
|
||||
5. tag the repository with the version f.e. "``cvs tag php_4_4_1RC1``"
|
||||
(of course, you need to change that to the version you're rolling an RC for).
|
||||
|
||||
8. run: ``./makedist 5.4.2-RC2``, this will export the tree, create configure
|
||||
6. Bump up the version numbers in ``main/php_version.h``, ``configure.in``
|
||||
and possibly ``NEWS`` again, to the **next** version. F.e. if the release
|
||||
candidate was "4.4.1RC1" then the new one should be "4.4.1RC2-dev" - regardless
|
||||
if we get a new RC or not. This is to make sure ``version_compare()`` can
|
||||
correctly work.
|
||||
|
||||
7. Commit those changes
|
||||
|
||||
8. Log in onto the snaps box and go into the correct tree (f.e. the PHP_4_4
|
||||
branch if you're rolling 4.4.x releases).
|
||||
|
||||
9. You do not have to update the tree, but of course you can with "``cvs up -dP``".
|
||||
|
||||
10. run: ``./makedist php 4.4.1RC1``, this will export the tree, create configure
|
||||
and build two tarballs (one gz and one bz2).
|
||||
|
||||
9. Copy those two tarballs to www.php.net, in your homedir there should be a
|
||||
11. Copy those two tarballs to www.php.net, in your homedir there should be a
|
||||
directory "downloads/". Copy them into there, so that the system can generate
|
||||
MD5 sums. If you do not have this directory, talk to Derick.
|
||||
|
||||
10. Now the RC can be found on http://downloads.php.net/yourname,
|
||||
12. Now the RC can be found on http://downloads.php.net/yourname,
|
||||
f.e. http://downloads.php.net/derick/
|
||||
|
||||
11. Once the release has been tagged, contact the PHP Windows development team
|
||||
13. Once the release has been tagged, contact the PHP Windows development team
|
||||
(internals-win@lists.php.net) so that Windows binaries can be created. Once
|
||||
those are made, they should be placed into the same directory as the source snapshots.
|
||||
|
||||
@@ -96,7 +100,7 @@ Derick) run the following commands for you:
|
||||
|
||||
``sudo -u ezmlm ezmlm-sub ~ezmlm/primary-qa-tester/mod moderator-email-address``
|
||||
|
||||
3. Update ``qa.git/include/release-qa.php`` with the appropriate information.
|
||||
3. Update ``web/qa/trunk/include/release-qa.php`` with the appropriate information.
|
||||
See the documentation within release-qa.php for more information, but all releases
|
||||
and RCs are configured here. Only $QA_RELEASES needs to be edited.
|
||||
|
||||
@@ -105,21 +109,22 @@ Derick) run the following commands for you:
|
||||
|
||||
Note: Remember to update the MD5 checksum information.
|
||||
|
||||
4. Update ``php.git/include/version.inc`` (x=major version number)
|
||||
1. Update in ``php-bugs/trunk/include/functions.inc`` the ``show_version_option``
|
||||
function to include the new RC and commit.
|
||||
|
||||
a. ``$PHP_x_RC`` = "5.4.0RC1"
|
||||
2. Update ``phpweb/include/version.inc`` (x=major version number)
|
||||
|
||||
a. ``$PHP_x_RC`` = "5.3.0RC1"
|
||||
|
||||
b. ``$PHP_x_RC_DATE`` = "06 September 2007"
|
||||
|
||||
5. Commit and push those changes:
|
||||
3. Commit those changes:
|
||||
|
||||
a. ``git commit -a && git push origin master``
|
||||
a. ``cvs commit include/version.inc include/releases.inc``
|
||||
|
||||
6. For the first RC, write the doc team (phpdoc@lists.php.net) about updating the
|
||||
4. For the first RC, write the doc team (phpdoc@lists.php.net) about updating the
|
||||
INSTALL and win32/install.txt files which are generated from the PHP manual sources.
|
||||
|
||||
7. Publish the announce on www.php.net as well (for all releases, alpha, RCs or other)
|
||||
|
||||
Rolling a stable release
|
||||
------------------------
|
||||
|
||||
@@ -157,7 +162,7 @@ and build two tarballs (one gz and one bz2).
|
||||
|
||||
13. Once the release has been tagged, contact the PHP Windows development team
|
||||
(internals-win@lists.php.net) so that Windows binaries can be created. Once
|
||||
those are made, they should be committed to SVN too.
|
||||
those are made, they should be committed to CVS too.
|
||||
|
||||
14. Check if the pear files are updated (phar for 5.1+ or run pear/make-pear-bundle.php with 4.4)
|
||||
|
||||
|
||||
+5
-10
@@ -43,18 +43,13 @@ Having said that, here are the organizational rules::
|
||||
|
||||
Currently we have the following branches in use::
|
||||
|
||||
trunk The active development branch.
|
||||
trunk Will become PHP 6.0. This CVS branch is for active development.
|
||||
|
||||
branches/PHP_5_4 Is used to release the PHP 5.4.x series. In release
|
||||
process, only bugfixes and very small changes approved
|
||||
by RMs are allowed.
|
||||
branches/PHP_5_3 Is used to release the PHP 5.3.x series. It still allows for
|
||||
larger enhancements.
|
||||
|
||||
branches/PHP_5_3 Is used to release the PHP 5.3.x series. This is current
|
||||
stable version and is open for bugfixes and small
|
||||
improvements (check with RMs if in doubt).
|
||||
|
||||
branches/PHP_5_2 Is used to release the PHP 5.2.x series. It is closed for
|
||||
changes now.
|
||||
branches/PHP_5_2 Is used to release the PHP 5.2.x series. Only bugfixes are permitted
|
||||
on this branch (Consult the releasemaster prior to commit).
|
||||
|
||||
branches/PHP_5_1 This branch is closed.
|
||||
|
||||
|
||||
+18
-6
@@ -19,7 +19,9 @@ A simple implementation might look like the following. This stores the
|
||||
original raw user data and adds a my_get_raw() function while the normal
|
||||
$_POST, $_GET and $_COOKIE arrays are only populated with stripped
|
||||
data. In this simple example all I am doing is calling strip_tags() on
|
||||
the data.
|
||||
the data. If register_globals is turned on, the default globals that
|
||||
are created will be stripped ($foo) while a $RAW_foo is created with the
|
||||
original user input.
|
||||
|
||||
ZEND_BEGIN_MODULE_GLOBALS(my_input_filter)
|
||||
zval *post_array;
|
||||
@@ -86,7 +88,7 @@ PHP_MINFO_FUNCTION(my_input_filter)
|
||||
{
|
||||
php_info_print_table_start();
|
||||
php_info_print_table_row( 2, "My Input Filter Support", "enabled" );
|
||||
php_info_print_table_row( 2, "Revision", "$Id$");
|
||||
php_info_print_table_row( 2, "Revision", "$Revision$");
|
||||
php_info_print_table_end();
|
||||
}
|
||||
|
||||
@@ -153,6 +155,8 @@ PHP_FUNCTION(my_get_raw)
|
||||
int var_len;
|
||||
zval **tmp;
|
||||
zval *array_ptr = NULL;
|
||||
HashTable *hash_ptr;
|
||||
char *raw_var;
|
||||
|
||||
if(zend_parse_parameters(2 TSRMLS_CC, "ls", &arg, &var, &var_len) == FAILURE) {
|
||||
return;
|
||||
@@ -170,15 +174,23 @@ PHP_FUNCTION(my_get_raw)
|
||||
break;
|
||||
}
|
||||
|
||||
if(!array_ptr) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
if(!array_ptr) RETURN_FALSE;
|
||||
|
||||
if(zend_hash_find(HASH_OF(array_ptr), var, var_len+5, (void **)&tmp) == SUCCESS) {
|
||||
/*
|
||||
* I'm changing the variable name here because when running with register_globals on,
|
||||
* the variable will end up in the global symbol table
|
||||
*/
|
||||
raw_var = emalloc(var_len+5); /* RAW_ and a \0 */
|
||||
strcpy(raw_var, "RAW_");
|
||||
strlcat(raw_var,var,var_len+5);
|
||||
hash_ptr = HASH_OF(array_ptr);
|
||||
|
||||
if(zend_hash_find(hash_ptr, raw_var, var_len+5, (void **)&tmp) == SUCCESS) {
|
||||
*return_value = **tmp;
|
||||
zval_copy_ctor(return_value);
|
||||
} else {
|
||||
RETVAL_FALSE;
|
||||
}
|
||||
efree(raw_var);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
Things to do or at least think about doing in the future. Name in
|
||||
parenthesis means that person has taken on this project.
|
||||
|
||||
Zend
|
||||
----
|
||||
* Allow foreach ($array as $k => list($a, $b)) syntax for multi
|
||||
dimensional arrays.
|
||||
* Look at replacing c-lib call tolower().
|
||||
* Make hash API functions work with HASH_OF() to save time.
|
||||
* Native large number support (probably with GNU GMP)
|
||||
* Const'ify APIs. Right now, many functions leave parameters untouched,
|
||||
but don't declare those as const. This makes interaction with other
|
||||
interfaces difficult which pass const parameters to us.
|
||||
|
||||
|
||||
global
|
||||
------
|
||||
* Make sure that all ZTS globals get destructed. Most ts_allocate_id()
|
||||
calls should have a dtor entry.
|
||||
* on some platforms unimplemented function will just do nothing
|
||||
(e.g. symlink) they should print a warning or not even be defined!
|
||||
(DONE ?)
|
||||
* --enable-all in configure. (--enable-shared=max ...)
|
||||
* make configure print out a summary when it's done (like XEmacs)
|
||||
* replace standard functions which work on static data with
|
||||
reentrancy-safe functions (DONE?).
|
||||
* make SAPI conform to CGI/1.1. Currently, all SAPI modules
|
||||
define REMOTE_ADDR etc. themselves and reach only various level
|
||||
of compliance.
|
||||
* see what functions might need to be changed to use HashPosition, so
|
||||
that the internal array pointer is not affected.
|
||||
* Move most extensions and PEAR packages out of the PHP CVS tree,
|
||||
include them again during release packaging.
|
||||
|
||||
Other
|
||||
* use thread-safe resolver functions (either require BIND 8 or adns).
|
||||
* implement javadoc based function docs template system.
|
||||
* provide optional IPv6 support (seems to be done?).
|
||||
* find a better way to implement script timeouts. SIGVTALRM is used
|
||||
by some POSIX threads implementations (i.e. OpenBSD) and is not
|
||||
available in ZTS mode.
|
||||
* Implement flush feature suitable for nested output buffers.
|
||||
|
||||
Streams
|
||||
-------
|
||||
* Route filestat.c through the wrapper layer; isolate the statcache code
|
||||
so that it is independent of php functions and can be applied to any
|
||||
stream/path.
|
||||
* Implement generalized connection pool for stated protocols such as
|
||||
ftp and http/1.1 (using keep-alive) to avoid having to negotiate
|
||||
new command/request stream for each subsequent call; Possibly store
|
||||
resources in contexts (creating a default context if necessary) to
|
||||
allow segmentation of connection pools.
|
||||
* Add a method to take ownership of the memory buffer in memory streams so
|
||||
that generating string values for zvals doesn't require an estrdup.
|
||||
* bundle and use curl lib for fopen wrapper.
|
||||
|
||||
documentation
|
||||
-------------
|
||||
* Add remarks in the documentation which functions are not implemented
|
||||
on win32.
|
||||
* Add remarks in the documentation which functions are not binary-safe.
|
||||
* Update curl documentation (DONE?)
|
||||
* Add developer documentation.
|
||||
* Add detailed documentation for Java extension.
|
||||
|
||||
ext/curl
|
||||
--------
|
||||
* Have a warning scheme for when people use unsupported features.
|
||||
|
||||
ext/oci8
|
||||
--------
|
||||
* All OCIFetch*() functions should return 0 for no more data and false on
|
||||
error.
|
||||
* Have a flag that trims trailing spaces from CHAR fields on retrieval.
|
||||
* Make allow_call_time_pass_reference=Off working.
|
||||
* For additional todo information, see oci8.c, in ext/oci8
|
||||
|
||||
ext/odbc
|
||||
--------
|
||||
For PHP 4.3.0:
|
||||
* update all php_error calls to php_error_docref where valid
|
||||
* integrate EXPERIMENTAL ODBC update for use in PHP 5.0, use for
|
||||
testing purposes only.
|
||||
|
||||
For PHP 5.0.0
|
||||
* Activate EXPERIMENTAL ODBC codebase update
|
||||
|
||||
ext/pcre
|
||||
--------
|
||||
* Allow user to set PCRE_NOTEMPTY, PCRE_ANCHORED at execution time, maybe
|
||||
|
||||
ext/pcntl
|
||||
---------
|
||||
* Change internal callback handler to use TICKS
|
||||
* Remove all zend_extension code
|
||||
* Add object callback support to pcntl_signal()
|
||||
|
||||
ext/session
|
||||
-----------
|
||||
For PHP 4.3.0:
|
||||
* session_abort() to abort session. ie: Do not save session data.
|
||||
* Allow unset($_SESSION) or unset($HTTP_SESSION_VARS) to unset
|
||||
session vars regardless of register_globals setting.
|
||||
|
||||
Other:
|
||||
* Maybe implement finer-grained session variables that could be
|
||||
locked individually.
|
||||
* Write a network-transparent storage back-end with fallover
|
||||
facilities
|
||||
* Provide a callback facility which is executed upon encountering
|
||||
an unknown class name during deserialization
|
||||
|
||||
ext/standard
|
||||
------------
|
||||
* Add a version number to data serialized via serialize().
|
||||
* Possibly modify parsing of GPC data to automatically create arrays if
|
||||
variable name is seen more than once.
|
||||
* Implement regex-cache for url-functions.
|
||||
* Move socket related functions to fsock.c.
|
||||
|
||||
ext/wddx
|
||||
--------
|
||||
* See if we can support the remaining data types:
|
||||
binary
|
||||
|
||||
http://www.wddx.org/WDDX_SDK_10a/7__References/WDDX_DTD.htm
|
||||
(Andrei)
|
||||
|
||||
* implement wddx_packet_as_javascript(). (Andrei)
|
||||
|
||||
other cool stuff
|
||||
----------------
|
||||
* PVM extension
|
||||
|
||||
vim:et:sw=4:ts=4
|
||||
@@ -0,0 +1,4 @@
|
||||
Zend Engine
|
||||
-----------
|
||||
- Look at making zend_constant value member be a zval* instead of zval. (Andi)
|
||||
- Implement inheritance rules for type hints. (Marcus)
|
||||
@@ -0,0 +1,89 @@
|
||||
Component: Zend Engine 2
|
||||
|
||||
Important stuff to finish: PPP members/PPP methods,
|
||||
support of overloaded extensions, possibly differentiate
|
||||
between class and namespace as discussed with Stig in
|
||||
Germany.
|
||||
Responsibility: Zeev, Andi, Stas
|
||||
Time frame: Couple of months for first part and extensions will be
|
||||
ongoing while PHP is being fixed.
|
||||
Things to leave for later versions: Native aggregation
|
||||
support, accessing static members via object and not class.
|
||||
|
||||
|
||||
Component: Aggregation
|
||||
Responsibility: Andi, Stig?
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: Redesign of API Versioning
|
||||
Responsibility: ?
|
||||
Time frame: 1 month
|
||||
|
||||
|
||||
Component: Thread Safety
|
||||
Identify the extensions that are not thread safe by design
|
||||
or due to dependant libraries and identify them as such.
|
||||
If possible try to resolve thread safety issue via code
|
||||
improvements (if php code or patches will be accepted by
|
||||
library maintainers). For situations where thread safety
|
||||
cannot easily be acheived a flag in the extension API is
|
||||
set so PHP can identify non-thread safe extensions. These
|
||||
extensions will not be loaded in a ZTS compiled binary
|
||||
(unless it is cli/cgi).
|
||||
|
||||
Responsibility: ?
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: SAPI
|
||||
Environment variables defined in the CGI spec need to be
|
||||
verified in each SAPI module that they conform to the CGI
|
||||
spec correctly. If they do not, the SAPI module needs to
|
||||
fix the variable prior to script execution. Having this
|
||||
conformity will aid in having PHP scripts run correctly
|
||||
under different sapi modules.
|
||||
|
||||
Responsibility: Shane Caraveo & each sapi module owner
|
||||
Timeframe: ? (but shouldn't be much effort, most modules are probably ok)
|
||||
|
||||
|
||||
Component: RPC Abstraction Layer
|
||||
Porting java, com, dotnet, xmlrpc, corba, soap and python, srm
|
||||
(are there more ?) to work with the new oo api and preferably
|
||||
by using ext/rpc.
|
||||
Responsibility: Harald
|
||||
Time frame: 2 months (but i have to wait for a few engine features first)
|
||||
|
||||
|
||||
Component: OO Extensions
|
||||
Each OO extension has to be revised and rewritten to fit into
|
||||
the new OO model. We should decide which extensions are a must
|
||||
to have for the release and which can be ported by the maintainer
|
||||
later as a separate pecl release.
|
||||
A list of extensions to be extended that have to be investigated:
|
||||
* browscap
|
||||
* aggregate
|
||||
* all *sql extensions (*_fetch_object)
|
||||
* domxml (seems like christian is rewriting it anyways)
|
||||
* ming
|
||||
Responsibility: Harald (, extension maintainers)
|
||||
|
||||
|
||||
Component: Abstract Data Types (ADT)
|
||||
Responsibility: Sterling, Harald
|
||||
Time frame: ?
|
||||
|
||||
|
||||
Component: Test Suite
|
||||
Extending the test suite with atleast a test for every
|
||||
function in an extension that doesn't require external
|
||||
resources. Also developing an automated test thing which
|
||||
cvs ups's, compiles and tests the build on a daily base on
|
||||
as much platforms/extensions as possible.
|
||||
|
||||
The test suite will also be extended to support threaded
|
||||
testing and testing for differing sapi modules (via http
|
||||
calls or other methods).
|
||||
Reponsibility: Derick (, extension maintainers)
|
||||
Time frame: 3 months
|
||||
-16
@@ -710,22 +710,6 @@ TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp)
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
Changes the signal mask of the calling thread
|
||||
*/
|
||||
#ifdef HAVE_SIGPROCMASK
|
||||
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset)
|
||||
{
|
||||
TSRM_ERROR((TSRM_ERROR_LEVEL_INFO, "Changed sigmask in thread: %ld", tsrm_thread_id()));
|
||||
/* TODO: add support for other APIs */
|
||||
#ifdef PTHREADS
|
||||
return pthread_sigmask(how, set, oldset);
|
||||
#else
|
||||
return sigprocmask(how, set, oldset);
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler)
|
||||
{
|
||||
|
||||
@@ -90,10 +90,6 @@ typedef struct {
|
||||
# define MUTEX_T beos_ben *
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SIGNAL_H
|
||||
#include <signal.h>
|
||||
#endif
|
||||
|
||||
typedef void (*ts_allocate_ctor)(void *, void ***);
|
||||
typedef void (*ts_allocate_dtor)(void *, void ***);
|
||||
|
||||
@@ -142,9 +138,6 @@ TSRM_API MUTEX_T tsrm_mutex_alloc(void);
|
||||
TSRM_API void tsrm_mutex_free(MUTEX_T mutexp);
|
||||
TSRM_API int tsrm_mutex_lock(MUTEX_T mutexp);
|
||||
TSRM_API int tsrm_mutex_unlock(MUTEX_T mutexp);
|
||||
#ifdef HAVE_SIGPROCMASK
|
||||
TSRM_API int tsrm_sigmask(int how, const sigset_t *set, sigset_t *oldset);
|
||||
#endif
|
||||
|
||||
TSRM_API void *tsrm_set_new_thread_begin_handler(tsrm_thread_begin_func_t new_thread_begin_handler);
|
||||
TSRM_API void *tsrm_set_new_thread_end_handler(tsrm_thread_end_func_t new_thread_end_handler);
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
#undef PTHREADS
|
||||
+1
-1
@@ -33,7 +33,7 @@ $(makefile_in_files): $(makefile_am_files)
|
||||
aclocal.m4: configure.in acinclude.m4
|
||||
aclocal
|
||||
|
||||
$(config_h_in): configure.in
|
||||
$(config_h_in): configure.in acconfig.h
|
||||
# explicitly remove target since autoheader does not seem to work
|
||||
# correctly otherwise (timestamps are not updated)
|
||||
@rm -f $@
|
||||
|
||||
@@ -7,10 +7,6 @@ AC_INIT(TSRM.c)
|
||||
AM_INIT_AUTOMAKE(TSRM, 1.0, nodefine)
|
||||
AM_CONFIG_HEADER(tsrm_config.h)
|
||||
|
||||
AH_TOP([
|
||||
#undef PTHREADS
|
||||
])
|
||||
|
||||
sinclude(tsrm.m4)
|
||||
|
||||
TSRM_BASIC_CHECKS
|
||||
|
||||
@@ -30,8 +30,6 @@ AC_REQUIRE([AC_PROG_RANLIB])dnl
|
||||
|
||||
AC_CHECK_HEADERS(stdarg.h)
|
||||
|
||||
AC_CHECK_FUNCS(sigprocmask)
|
||||
|
||||
])
|
||||
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2012 The PHP Group |
|
||||
| Copyright (c) 1997-2011 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2012 The PHP Group |
|
||||
| Copyright (c) 1997-2011 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 |
|
||||
|
||||
+40
-38
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2012 The PHP Group |
|
||||
| Copyright (c) 1997-2011 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 |
|
||||
@@ -277,6 +277,18 @@ CWD_API int php_sys_readlink(const char *link, char *target, size_t target_len){
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int php_sys_stat(const char *path, struct stat *buf) /* {{{ */
|
||||
{
|
||||
return php_sys_stat_ex(path, buf, 0);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int php_sys_lstat(const char *path, struct stat *buf) /* {{{ */
|
||||
{
|
||||
return php_sys_stat_ex(path, buf, 1);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
CWD_API int php_sys_stat_ex(const char *path, struct stat *buf, int lstat) /* {{{ */
|
||||
{
|
||||
WIN32_FILE_ATTRIBUTE_DATA data;
|
||||
@@ -706,6 +718,7 @@ static inline realpath_cache_bucket* realpath_cache_find(const char *path, int p
|
||||
} else {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
}
|
||||
|
||||
free(r);
|
||||
} else if (key == (*bucket)->key && path_len == (*bucket)->path_len &&
|
||||
memcmp(path, (*bucket)->path, path_len) == 0) {
|
||||
@@ -760,9 +773,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
|
||||
while (1) {
|
||||
if (len <= start) {
|
||||
if (link_is_dir) {
|
||||
*link_is_dir = 1;
|
||||
}
|
||||
return start;
|
||||
}
|
||||
|
||||
@@ -779,10 +789,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
continue;
|
||||
} else if (i == len - 2 && path[i] == '.' && path[i+1] == '.') {
|
||||
/* remove '..' and previous directory */
|
||||
is_dir = 1;
|
||||
if (link_is_dir) {
|
||||
*link_is_dir = 1;
|
||||
}
|
||||
if (i - 1 <= start) {
|
||||
return start ? start : len;
|
||||
}
|
||||
@@ -1139,7 +1145,7 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
|
||||
/* Resolve path relatively to state and put the real path into state */
|
||||
/* returns 0 for ok, 1 for error */
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath TSRMLS_DC) /* {{{ */
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath) /* {{{ */
|
||||
{
|
||||
int path_length = strlen(path);
|
||||
char resolved_path[MAXPATHLEN];
|
||||
@@ -1149,6 +1155,7 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
|
||||
int ret;
|
||||
int add_slash;
|
||||
void *tmp;
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (path_length == 0 || path_length >= MAXPATHLEN-1) {
|
||||
#ifdef TSRM_WIN32
|
||||
@@ -1207,14 +1214,9 @@ CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func
|
||||
return 1;
|
||||
}
|
||||
memcpy(resolved_path, state->cwd, state_cwd_length);
|
||||
if (resolved_path[state_cwd_length-1] == DEFAULT_SLASH) {
|
||||
memcpy(resolved_path + state_cwd_length, path, path_length + 1);
|
||||
path_length += state_cwd_length;
|
||||
} else {
|
||||
resolved_path[state_cwd_length] = DEFAULT_SLASH;
|
||||
memcpy(resolved_path + state_cwd_length + 1, path, path_length + 1);
|
||||
path_length += state_cwd_length + 1;
|
||||
}
|
||||
resolved_path[state_cwd_length] = DEFAULT_SLASH;
|
||||
memcpy(resolved_path + state_cwd_length + 1, path, path_length + 1);
|
||||
path_length += state_cwd_length + 1;
|
||||
}
|
||||
} else {
|
||||
#ifdef TSRM_WIN32
|
||||
@@ -1349,7 +1351,7 @@ verify:
|
||||
|
||||
CWD_API int virtual_chdir(const char *path TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, CWD_REALPATH TSRMLS_CC)?-1:0;
|
||||
return virtual_file_ex(&CWDG(cwd), path, php_is_dir_ok, CWD_REALPATH)?-1:0;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -1417,7 +1419,7 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)==0) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)==0) {
|
||||
int len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
|
||||
|
||||
memcpy(real_path, new_state.cwd, len);
|
||||
@@ -1439,7 +1441,7 @@ CWD_API int virtual_filepath_ex(const char *path, char **filepath, verify_path_f
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
retval = virtual_file_ex(&new_state, path, verify_path, CWD_FILEPATH TSRMLS_CC);
|
||||
retval = virtual_file_ex(&new_state, path, verify_path, CWD_FILEPATH);
|
||||
|
||||
*filepath = new_state.cwd;
|
||||
|
||||
@@ -1464,7 +1466,7 @@ CWD_API FILE *virtual_fopen(const char *path, const char *mode TSRMLS_DC) /* {{{
|
||||
}
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1482,13 +1484,13 @@ CWD_API int virtual_access(const char *pathname, int mode TSRMLS_DC) /* {{{ */
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if defined(TSRM_WIN32)
|
||||
ret = tsrm_win32_access(new_state.cwd, mode TSRMLS_CC);
|
||||
ret = tsrm_win32_access(new_state.cwd, mode);
|
||||
#else
|
||||
ret = access(new_state.cwd, mode);
|
||||
#endif
|
||||
@@ -1555,7 +1557,7 @@ CWD_API int virtual_utime(const char *filename, struct utimbuf *buf TSRMLS_DC) /
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1578,7 +1580,7 @@ CWD_API int virtual_chmod(const char *filename, mode_t mode TSRMLS_DC) /* {{{ */
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1597,7 +1599,7 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li
|
||||
int ret;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, filename, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1624,7 +1626,7 @@ CWD_API int virtual_open(const char *path TSRMLS_DC, int flags, ...) /* {{{ */
|
||||
int f;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1652,7 +1654,7 @@ CWD_API int virtual_creat(const char *path, mode_t mode TSRMLS_DC) /* {{{ */
|
||||
int f;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1671,14 +1673,14 @@ CWD_API int virtual_rename(char *oldname, char *newname TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&old_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&old_state, oldname, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&old_state, oldname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&old_state);
|
||||
return -1;
|
||||
}
|
||||
oldname = old_state.cwd;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, newname, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, newname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&old_state);
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
@@ -1707,7 +1709,7 @@ CWD_API int virtual_stat(const char *path, struct stat *buf TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1725,7 +1727,7 @@ CWD_API int virtual_lstat(const char *path, struct stat *buf TSRMLS_DC) /* {{{ *
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1743,7 +1745,7 @@ CWD_API int virtual_unlink(const char *path TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1761,7 +1763,7 @@ CWD_API int virtual_mkdir(const char *pathname, mode_t mode TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_FILEPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_FILEPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1782,7 +1784,7 @@ CWD_API int virtual_rmdir(const char *pathname TSRMLS_DC) /* {{{ */
|
||||
int retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_EXPAND TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_EXPAND)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return -1;
|
||||
}
|
||||
@@ -1804,7 +1806,7 @@ CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC) /* {{{ */
|
||||
DIR *retval;
|
||||
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, pathname, NULL, CWD_REALPATH)) {
|
||||
CWD_STATE_FREE(&new_state);
|
||||
return NULL;
|
||||
}
|
||||
@@ -1819,7 +1821,7 @@ CWD_API DIR *virtual_opendir(const char *pathname TSRMLS_DC) /* {{{ */
|
||||
#ifdef TSRM_WIN32
|
||||
CWD_API FILE *virtual_popen(const char *command, const char *type TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
return popen_ex(command, type, CWDG(cwd).cwd, NULL TSRMLS_CC);
|
||||
return popen_ex(command, type, CWDG(cwd).cwd, NULL);
|
||||
}
|
||||
/* }}} */
|
||||
#elif defined(NETWARE)
|
||||
@@ -1942,7 +1944,7 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH TSRMLS_CC)) {
|
||||
if (virtual_file_ex(&new_state, path, NULL, CWD_REALPATH)) {
|
||||
free(new_state.cwd);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2012 The PHP Group |
|
||||
| Copyright (c) 1997-2011 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 |
|
||||
@@ -131,8 +131,8 @@ typedef unsigned short mode_t;
|
||||
|
||||
#ifdef TSRM_WIN32
|
||||
CWD_API int php_sys_stat_ex(const char *path, struct stat *buf, int lstat);
|
||||
# define php_sys_stat(path, buf) php_sys_stat_ex(path, buf, 0)
|
||||
# define php_sys_lstat(path, buf) php_sys_stat_ex(path, buf, 1)
|
||||
CWD_API int php_sys_stat(const char *path, struct stat *buf);
|
||||
CWD_API int php_sys_lstat(const char *path, struct stat *buf);
|
||||
CWD_API int php_sys_readlink(const char *link, char *target, size_t target_len);
|
||||
#else
|
||||
# define php_sys_stat stat
|
||||
@@ -201,7 +201,7 @@ CWD_API int virtual_chown(const char *filename, uid_t owner, gid_t group, int li
|
||||
#define CWD_FILEPATH 1 /* resolve symlinks if file is exist otherwise expand */
|
||||
#define CWD_REALPATH 2 /* call realpath(), resolve symlinks. File must exist */
|
||||
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath TSRMLS_DC);
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path, verify_path_func verify_path, int use_realpath);
|
||||
|
||||
CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC);
|
||||
|
||||
@@ -267,7 +267,7 @@ CWD_API realpath_cache_bucket** realpath_cache_get_buckets(TSRMLS_D);
|
||||
#define VCWD_REALPATH(path, real_path) virtual_realpath(path, real_path TSRMLS_CC)
|
||||
#define VCWD_RENAME(oldname, newname) virtual_rename(oldname, newname TSRMLS_CC)
|
||||
#define VCWD_STAT(path, buff) virtual_stat(path, buff TSRMLS_CC)
|
||||
# define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
|
||||
#define VCWD_LSTAT(path, buff) virtual_lstat(path, buff TSRMLS_CC)
|
||||
#define VCWD_UNLINK(path) virtual_unlink(path TSRMLS_CC)
|
||||
#define VCWD_MKDIR(pathname, mode) virtual_mkdir(pathname, mode TSRMLS_CC)
|
||||
#define VCWD_RMDIR(pathname) virtual_rmdir(pathname TSRMLS_CC)
|
||||
@@ -310,7 +310,7 @@ CWD_API realpath_cache_bucket** realpath_cache_get_buckets(TSRMLS_D);
|
||||
#define VCWD_OPENDIR(pathname) opendir(pathname)
|
||||
#define VCWD_POPEN(command, type) popen(command, type)
|
||||
#if defined(TSRM_WIN32)
|
||||
#define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode TSRMLS_CC)
|
||||
#define VCWD_ACCESS(pathname, mode) tsrm_win32_access(pathname, mode)
|
||||
#else
|
||||
#define VCWD_ACCESS(pathname, mode) access(pathname, mode)
|
||||
#endif
|
||||
|
||||
+8
-6
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2012 The PHP Group |
|
||||
| Copyright (c) 1997-2011 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 |
|
||||
@@ -190,7 +190,7 @@ Finished:
|
||||
return NULL;
|
||||
}
|
||||
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC)
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode)
|
||||
{
|
||||
time_t t;
|
||||
HANDLE thread_token;
|
||||
@@ -208,6 +208,8 @@ TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC)
|
||||
realpath_cache_bucket * bucket = NULL;
|
||||
char * real_path = NULL;
|
||||
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (mode == 1 /*X_OK*/) {
|
||||
DWORD type;
|
||||
return GetBinaryType(pathname, &type) ? 0 : -1;
|
||||
@@ -446,12 +448,10 @@ static HANDLE dupHandle(HANDLE fh, BOOL inherit) {
|
||||
|
||||
TSRM_API FILE *popen(const char *command, const char *type)
|
||||
{
|
||||
TSRMLS_FETCH();
|
||||
|
||||
return popen_ex(command, type, NULL, NULL TSRMLS_CC);
|
||||
return popen_ex(command, type, NULL, NULL);
|
||||
}
|
||||
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC)
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env)
|
||||
{
|
||||
FILE *stream = NULL;
|
||||
int fno, type_len = strlen(type), read, mode;
|
||||
@@ -469,6 +469,8 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd,
|
||||
HANDLE token_user = NULL;
|
||||
BOOL asuser = TRUE;
|
||||
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (!type) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
+3
-3
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2012 The PHP Group |
|
||||
| Copyright (c) 1997-2011 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 |
|
||||
@@ -95,10 +95,10 @@ char * tsrm_win32_get_path_sid_key(const char *pathname TSRMLS_DC);
|
||||
TSRM_API void tsrm_win32_startup(void);
|
||||
TSRM_API void tsrm_win32_shutdown(void);
|
||||
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC);
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env);
|
||||
TSRM_API FILE *popen(const char *command, const char *type);
|
||||
TSRM_API int pclose(FILE *stream);
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC);
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode);
|
||||
TSRM_API int win32_utime(const char *filename, struct utimbuf *buf);
|
||||
|
||||
TSRM_API int shmget(int key, int size, int flags);
|
||||
|
||||
+3
-187
@@ -1,207 +1,23 @@
|
||||
$Id$
|
||||
|
||||
UPGRADE NOTES - PHP X.Y
|
||||
UPGRADE NOTES - PHP 5.3.4
|
||||
|
||||
1. Internal API changes
|
||||
a. virtual_file_ex
|
||||
b. stat/lstat support
|
||||
c. readlink support
|
||||
d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...)
|
||||
e. Zend\zend_fast_cache.h has been removed
|
||||
f. streams that enclose private streams
|
||||
g. leak_variable
|
||||
h. API Signature changes
|
||||
i. new TSRM function expand_filepath_with_mode
|
||||
|
||||
2. Build system changes
|
||||
a. Unix build system changes
|
||||
b. Windows build system changes
|
||||
|
||||
|
||||
========================
|
||||
1. Internal API changes
|
||||
========================
|
||||
|
||||
a. virtual_file_ex
|
||||
|
||||
virtual_file_ex takes now a TSRM context as last parameter:
|
||||
CWD_API int virtual_file_ex(cwd_state *state, const char *path,
|
||||
verify_path_func verify_path, int use_realpath TSRLS_DC);
|
||||
|
||||
|
||||
b. stat/lstat support
|
||||
a. stat/lstat support
|
||||
|
||||
lstat is now available on all platforms. On unix-like platform
|
||||
php_sys_lstat is an alias to lstat (when avaible). On Windows it is now
|
||||
available using php_sys_lstat. php_sys_stat and php_sys_lstat usage is recommended
|
||||
instead of calling lstat directly, to ensure portability.
|
||||
|
||||
|
||||
c. readlink support
|
||||
b. readlink support
|
||||
|
||||
readlink is now available on all platforms. On unix-like platform
|
||||
php_sys_readlink is an alias to readlink (when avaible). On Windows it is now
|
||||
available using php_sys_readlink. php_sys_readlink usage is recommended
|
||||
instead of calling readlink directly, to ensure portability.
|
||||
|
||||
|
||||
d. layout of some core ZE structures (zend_op_array, zend_class_entry, ...)
|
||||
|
||||
. zend_function.pass_rest_by_reference is replaced by
|
||||
ZEND_ACC_PASS_REST_BY_REFERENCE in zend_function.fn_flags
|
||||
. zend_function.return_reference is replaced by ZEND_ACC_RETURN_REFERENCE
|
||||
in zend_function.fn_flags
|
||||
. zend_arg_info.required_num_args removed. it was needed only for internal
|
||||
functions. Now the first arg_info for internal function (which has special
|
||||
meaning) is represented by zend_internal_function_info structure.
|
||||
. zend_op_array.size, size_var, size_literal, current_brk_cont,
|
||||
backpatch_count moved into CG(context), because they are used only during
|
||||
compilation.
|
||||
. zend_op_array.start_op is moved into EG(start_op), because it's used
|
||||
only for 'interactive' execution of single top-level op-array.
|
||||
. zend_op_array.done_pass_two is replaced by ZEND_ACC_DONE_PASS_TWO in
|
||||
zend_op_array.fn_flags.
|
||||
. op_array.vars array is trimmed (reallocated) during pass_two.
|
||||
. zend_class_entry.constants_updated is replaced by
|
||||
ZEND_ACC_CONSTANTS_UPDATED in zend_class_entry.ce_flags
|
||||
. the size of zend_class_entry is reduced by sharing the same memory space
|
||||
by different information for internal and user classes.
|
||||
See zend_class_inttry.info union.
|
||||
|
||||
|
||||
e. Zend\zend_fast_cache.h
|
||||
|
||||
It should not have been used anymore since php5, but now this header has
|
||||
been removed. The following macros are not available anymore:
|
||||
|
||||
ZEND_FAST_ALLOC(p, type, fc_type)
|
||||
ZEND_FAST_FREE(p, fc_type)
|
||||
ZEND_FAST_ALLOC_REL(p, type, fc_type)
|
||||
ZEND_FAST_FREE_REL(p, fc_type)
|
||||
|
||||
Use emalloc, emalloc_rel, efree or efree_rel instead.
|
||||
|
||||
|
||||
f. Streams that enclose private streams
|
||||
|
||||
Some streams, like the temp:// stream, may enclose private streams. If the
|
||||
outer stream leaks due to a programming error or is not exposed through a
|
||||
zval (and therefore is not deleted when all the zvals are gone), it will
|
||||
be destroyed on shutdown.
|
||||
The problem is that the outer usually wants itself to close the inner stream,
|
||||
so that it may do any other shutdown action that requires the inner stream to
|
||||
be live (e.g. commit data to it). If the outer stream is exposed through a
|
||||
zval and the inner one isn't, this is not a problem because the outer stream
|
||||
will be freed when the zval is destroyed, which happens before the resources
|
||||
are destroyed on shutdown.
|
||||
On resource list shutdown, the cleanup happens in reverse order of resource
|
||||
creation, so if the inner stream was created in the opener of the outer stream,
|
||||
it will be destroyed first.
|
||||
The following functions were added to the streams API to force a predictable
|
||||
destruction order:
|
||||
|
||||
PHPAPI php_stream *php_stream_encloses(php_stream *enclosing, php_stream *enclosed);
|
||||
#define php_stream_free_enclosed(stream_enclosed, close_options)
|
||||
PHPAPI int _php_stream_free_enclosed(php_stream *stream_enclosed, int close_options TSRMLS_DC);
|
||||
|
||||
Additionally, the following member was added to php_stream:
|
||||
|
||||
struct _php_stream *enclosing_stream;
|
||||
|
||||
and the following macro was added:
|
||||
|
||||
#define PHP_STREAM_FREE_IGNORE_ENCLOSING 32
|
||||
|
||||
The function php_stream_encloses declares the first stream encloses the second.
|
||||
This has the effect that, when the inner stream is closed from a resource
|
||||
destructor it will abort and try to free its enclosing stream instead.
|
||||
To prevent this from happening when the inner stream is freed from the outer
|
||||
stream, the macro php_stream_free_enclosed should be used instead of
|
||||
php_stream_free/php_stream_close/php_stream_pclose, or the flag
|
||||
PHP_STREAM_FREE_IGNORE_ENCLOSING should be directly passed to php_stream_free.
|
||||
The outer stream cannot abstain, in its close callback, from closing the inner
|
||||
stream or clear the enclosing_stream pointer in its enclosed stream by calling
|
||||
php_stream_encloses with the 2nd argument NULL. If this is not done, there will
|
||||
be problems, so observe this requirement when using php_stream_encloses.
|
||||
|
||||
|
||||
g. leak_variable
|
||||
|
||||
The function leak_variable(variable [, leak_data]) was added. It is only
|
||||
available on debug builds. It increments the refcount of a zval or, if the
|
||||
second argument is true and the variable is either an object or a resource
|
||||
it increments the refcounts of those objects instead.
|
||||
|
||||
|
||||
h. API Signature changes
|
||||
|
||||
. zend_list_insert
|
||||
ZEND_API int zend_list_insert(void *ptr, int type TSRMLS_DC);
|
||||
call: zend_list_insert(a, SOMETYPE TSRMLS_CC);
|
||||
NB: If zend_list_insert is used to register a resource,
|
||||
ZEND_REGISTER_RESOURCE could be used instead.
|
||||
|
||||
. php_le_stream_context(TSRMLS_C)
|
||||
PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D)
|
||||
call: context = php_stream_context_alloc(TSRMLS_C);
|
||||
|
||||
. php_stream_context_alloc
|
||||
PHPAPI php_stream_context *php_stream_context_alloc(TSRMLS_D);
|
||||
call: context = php_stream_context_alloc(TSRMLS_C);
|
||||
|
||||
. sapi_get_request_time(TSRMLS_D);
|
||||
SAPI_API double sapi_get_request_time(TSRMLS_D);
|
||||
|
||||
. sapi_register_default_post_reader
|
||||
SAPI_API int sapi_register_default_post_reader(void (*default_post_reader)(TSRMLS_D) TSRMLS_DC);
|
||||
|
||||
. sapi_register_treat_data
|
||||
SAPI_API int sapi_register_treat_data(void (*treat_data)(int arg, char *str, zval *destArray TSRMLS_DC) TSRMLS_DC);
|
||||
|
||||
. sapi_register_input_filter
|
||||
SAPI_API int sapi_register_input_filter(unsigned int (*input_filter)(int arg, char *var, char **val, unsigned int val_len, unsigned int *new_val_len TSRMLS_DC), unsigned int (*input_filter_init)(TSRMLS_D) TSRMLS_DC);
|
||||
|
||||
. tsrm_win32_access
|
||||
TSRM_API int tsrm_win32_access(const char *pathname, int mode TSRMLS_DC);
|
||||
|
||||
. popen_ex (win32)
|
||||
TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd, char *env TSRMLS_DC);
|
||||
|
||||
. php_get_current_user
|
||||
PHPAPI php_get_current_user(TSRMLS_D)
|
||||
Call: char *user = php_get_current_user(TSRMLS_C);
|
||||
|
||||
. php_idate
|
||||
PHPAPI php_idate(char format, time_t ts, int localtime TSRMLS_DC)
|
||||
Call: int ret = php_idate(format, ts, localtime TSRMLS_CC)
|
||||
|
||||
. php_escape_html_entities
|
||||
(size_t parameters were ints, previous "quote_style" (now flags) has expanded meaning)
|
||||
PHPAPI char *php_escape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
|
||||
|
||||
. php_escape_html_entities_ex
|
||||
PHPAPI char *php_escape_html_entities_ex(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset, zend_bool double_encode TSRMLS_DC);
|
||||
|
||||
. php_unescape_html_entities
|
||||
PHPAPI char *php_unescape_html_entities(unsigned char *old, size_t oldlen, size_t *newlen, int all, int flags, char *hint_charset TSRMLS_DC);
|
||||
|
||||
i.
|
||||
PHPAPI char *expand_filepath_with_mode(const char *filepath, char *real_path, const char *relative_to, size_t relative_to_len, int realpath_mode TSRMLS_DC);
|
||||
expand_filepath_with_mode lets define how realpath will behave, using one of the existing mode: CWD_EXPAND , CWD_FILEPATH or CWD_REALPATH.
|
||||
|
||||
========================
|
||||
2. Build system changes
|
||||
========================
|
||||
|
||||
a. Unix build system changes
|
||||
|
||||
- Changes in SAPI module build:
|
||||
. When adding new binary SAPI (executable, like CLI/CGI/FPM) use CLI config.m4 and Makefile.frag files as templates and replace CLI/cli with your SAPI name.
|
||||
|
||||
- New macros:
|
||||
. PHP_INIT_DTRACE(providerdesc, header-file, sources [, module])
|
||||
|
||||
|
||||
b. Windows build system changes
|
||||
-
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ libZend_la_SOURCES=\
|
||||
zend_objects_API.c zend_ts_hash.c zend_stream.c \
|
||||
zend_default_classes.c \
|
||||
zend_iterators.c zend_interfaces.c zend_exceptions.c \
|
||||
zend_strtod.c zend_closures.c zend_float.c zend_string.c zend_signal.c
|
||||
zend_strtod.c zend_closures.c zend_float.c
|
||||
|
||||
libZend_la_LDFLAGS =
|
||||
libZend_la_LIBADD = @ZEND_EXTRA_LIBS@
|
||||
|
||||
+1
-10
@@ -9,7 +9,7 @@ allocation overhead and speedup memory management.
|
||||
|
||||
The new manager's "configure" has no "--disable-zend-memory-manager" option,
|
||||
but it has "--enable-malloc-mm" instead. It is enabled by default in DEBUG
|
||||
build and disabled by default in RELEASE build. When enabled it allows selecting
|
||||
build and disabled by default in RELEASE build. when enabled it allows selecting
|
||||
between malloc and emalloc at runtime so you can use internal and external memory
|
||||
debuggers without recompilation.
|
||||
|
||||
@@ -24,15 +24,6 @@ Zend MM disabled:
|
||||
|
||||
$ USE_ZEND_ALLOC=0 valgrind --leak-check=full sapi/cli/php -r 'leak();'
|
||||
|
||||
Shared extensions:
|
||||
------------------
|
||||
|
||||
Since PHP 5.3.11 it is possible to prevent shared extensions from unloading so
|
||||
that valgrind can correctly track the memory leaks in shared extensions. For
|
||||
this there is the ZEND_DONT_UNLOAD_MODULES environment variable. If set, then
|
||||
DL_UNLOAD() is skipped during the shutdown of shared extensions.
|
||||
|
||||
|
||||
Tweaking:
|
||||
---------
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Title: Zend 2.0 Namespaces
|
||||
Version: $Id$
|
||||
Version: $Revision$
|
||||
Status: declined
|
||||
Maintainer: Stig S. Bakken <ssb@php.net>
|
||||
Created: 2001-09-08
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
Title: Loose type requirements for functions
|
||||
Version: $Id$
|
||||
Version: $Revision$
|
||||
Status: draft
|
||||
Maintainer: Brian Moon <brianm@dealnews.com>
|
||||
Created: 2001-09-17
|
||||
|
||||
+4
-8
@@ -243,10 +243,6 @@ SOURCE=.\zend_stream.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -319,6 +315,10 @@ SOURCE=.\zend_extensions.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_fast_cache.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_globals.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -411,10 +411,6 @@ SOURCE=.\zend_stream.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
+14
-27
@@ -176,6 +176,13 @@ AC_ARG_ENABLE(inline-optimization,
|
||||
ZEND_INLINE_OPTIMIZATION=yes
|
||||
])
|
||||
|
||||
AC_ARG_ENABLE(zend-multibyte,
|
||||
[ --enable-zend-multibyte Compile with zend multibyte support], [
|
||||
ZEND_MULTIBYTE=$enableval
|
||||
],[
|
||||
ZEND_MULTIBYTE=no
|
||||
])
|
||||
|
||||
AC_MSG_CHECKING([virtual machine dispatch method])
|
||||
AC_MSG_RESULT($PHP_ZEND_VM)
|
||||
|
||||
@@ -188,6 +195,9 @@ AC_MSG_RESULT($ZEND_INLINE_OPTIMIZATION)
|
||||
AC_MSG_CHECKING(whether to enable Zend debugging)
|
||||
AC_MSG_RESULT($ZEND_DEBUG)
|
||||
|
||||
AC_MSG_CHECKING(whether to enable Zend multibyte)
|
||||
AC_MSG_RESULT($ZEND_MULTIBYTE)
|
||||
|
||||
case $PHP_ZEND_VM in
|
||||
SWITCH)
|
||||
AC_DEFINE(ZEND_VM_KIND,ZEND_VM_KIND_SWITCH,[virtual machine dispatch method])
|
||||
@@ -222,6 +232,10 @@ if test "$ZEND_MAINTAINER_ZTS" = "yes"; then
|
||||
LIBZEND_CPLUSPLUS_CHECKS
|
||||
fi
|
||||
|
||||
if test "$ZEND_MULTIBYTE" = "yes"; then
|
||||
AC_DEFINE(ZEND_MULTIBYTE, 1, [ ])
|
||||
fi
|
||||
|
||||
changequote({,})
|
||||
if test -n "$GCC" && test "$ZEND_INLINE_OPTIMIZATION" != "yes"; then
|
||||
INLINE_CFLAGS=`echo $ac_n "$CFLAGS $ac_c" | sed s/-O[0-9s]*//`
|
||||
@@ -392,28 +406,8 @@ int main()
|
||||
|
||||
AC_CHECK_FUNCS(mremap)
|
||||
|
||||
|
||||
AC_ARG_ENABLE(zend-signals,
|
||||
[ --enable-zend-signals Use zend signal handling],[
|
||||
ZEND_SIGNALS=$enableval
|
||||
],[
|
||||
ZEND_SIGNALS=no
|
||||
])
|
||||
|
||||
AC_CHECK_FUNC(sigaction, [
|
||||
AC_DEFINE(HAVE_SIGACTION, 1, [Whether sigaction() is available])
|
||||
], [
|
||||
ZEND_SIGNALS=no
|
||||
])
|
||||
if test "$ZEND_SIGNALS" = "yes"; then
|
||||
AC_DEFINE(ZEND_SIGNALS, 1, [Use zend signal handling])
|
||||
CFLAGS="$CFLAGS -DZEND_SIGNALS"
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether to enable zend signal handling)
|
||||
AC_MSG_RESULT($ZEND_SIGNALS)
|
||||
|
||||
])
|
||||
|
||||
AC_DEFUN([LIBZEND_CPLUSPLUS_CHECKS],[
|
||||
|
||||
@@ -425,11 +419,4 @@ if test -r "/dev/urandom" && test -c "/dev/urandom"; then
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
AC_MSG_CHECKING(whether /dev/arandom exists)
|
||||
if test -r "/dev/arandom" && test -c "/dev/arandom"; then
|
||||
AC_DEFINE([HAVE_DEV_ARANDOM], 1, [Define if the target system has /dev/arandom device])
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
fi
|
||||
+4
-8
@@ -273,10 +273,6 @@ SOURCE=.\zend_stream.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -349,6 +345,10 @@ SOURCE=.\zend_extensions.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_fast_cache.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_globals.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@@ -445,10 +445,6 @@ SOURCE=.\zend_stream.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_string.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\zend_strtod.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
+127
@@ -0,0 +1,127 @@
|
||||
/*
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
+----------------------------------------------------------------------+
|
||||
| This source file is subject to version 2.00 of the Zend 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.zend.com/license/2_00.txt. |
|
||||
| If you did not receive a copy of the Zend license and are unable to |
|
||||
| obtain it through the world-wide-web, please send a note to |
|
||||
| license@zend.com so we can mail you a copy immediately. |
|
||||
+----------------------------------------------------------------------+
|
||||
| Authors: Andi Gutmans <andi@zend.com> |
|
||||
| Zeev Suraski <zeev@zend.com> |
|
||||
+----------------------------------------------------------------------+
|
||||
*/
|
||||
|
||||
/* $Id$ */
|
||||
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
# define ZEND_API __attribute__ ((visibility("default")))
|
||||
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
|
||||
#else
|
||||
# define ZEND_API
|
||||
# define ZEND_DLEXPORT
|
||||
#endif
|
||||
|
||||
#define ZEND_DLIMPORT
|
||||
|
||||
@TOP@
|
||||
|
||||
#undef uint
|
||||
#undef ulong
|
||||
|
||||
/* Define if you want to enable memory limit support */
|
||||
#define MEMORY_LIMIT 0
|
||||
|
||||
@BOTTOM@
|
||||
|
||||
#ifndef ZEND_ACCONFIG_H_NO_C_PROTOS
|
||||
|
||||
#ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_IEEEFP_H
|
||||
# include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#if ZEND_BROKEN_SPRINTF
|
||||
int zend_sprintf(char *buffer, const char *format, ...);
|
||||
#else
|
||||
# define zend_sprintf sprintf
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* To enable the is_nan, is_infinite and is_finite PHP functions */
|
||||
#ifdef NETWARE
|
||||
#define HAVE_ISNAN 1
|
||||
#define HAVE_ISINF 1
|
||||
#define HAVE_ISFINITE 1
|
||||
#endif
|
||||
|
||||
#ifndef zend_isnan
|
||||
#ifdef HAVE_ISNAN
|
||||
#define zend_isnan(a) isnan(a)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
|
||||
#else
|
||||
#define zend_isnan(a) 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ISINF
|
||||
#define zend_isinf(a) isinf(a)
|
||||
#elif defined(INFINITY)
|
||||
/* Might not work, but is required by ISO C99 */
|
||||
#define zend_isinf(a) (((a)==INFINITY)?1:0)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
|
||||
#else
|
||||
#define zend_isinf(a) 0
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FINITE
|
||||
#define zend_finite(a) finite(a)
|
||||
#elif defined(HAVE_ISFINITE) || defined(isfinite)
|
||||
#define zend_finite(a) isfinite(a)
|
||||
#elif defined(fpclassify)
|
||||
#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
|
||||
#else
|
||||
#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
|
||||
#endif
|
||||
|
||||
#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */
|
||||
|
||||
#ifdef NETWARE
|
||||
#ifdef USE_WINSOCK
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Local variables:
|
||||
* tab-width: 4
|
||||
* c-basic-offset: 4
|
||||
* indent-tabs-mode: t
|
||||
* End:
|
||||
*/
|
||||
@@ -3,6 +3,7 @@ if (function_exists("date_default_timezone_set")) {
|
||||
date_default_timezone_set("UTC");
|
||||
}
|
||||
|
||||
date_default_timezone_set('UTC');
|
||||
function simple() {
|
||||
$a = 0;
|
||||
for ($i = 0; $i < 1000000; $i++)
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ $(makefile_in_files): $(makefile_am_files)
|
||||
aclocal.m4: configure.in acinclude.m4
|
||||
aclocal
|
||||
|
||||
$(config_h_in): configure.in
|
||||
$(config_h_in): configure.in acconfig.h
|
||||
# explicitly remove target since autoheader does not seem to work
|
||||
# correctly otherwise (timestamps are not updated)
|
||||
@rm -f $@
|
||||
|
||||
@@ -11,105 +11,6 @@ AM_PROG_CC_STDC
|
||||
ZEND_VERSION=$VERSION
|
||||
AC_ZEND_C_BIGENDIAN
|
||||
|
||||
AH_TOP([
|
||||
#if defined(__GNUC__) && __GNUC__ >= 4
|
||||
# define ZEND_API __attribute__ ((visibility("default")))
|
||||
# define ZEND_DLEXPORT __attribute__ ((visibility("default")))
|
||||
#else
|
||||
# define ZEND_API
|
||||
# define ZEND_DLEXPORT
|
||||
#endif
|
||||
|
||||
#define ZEND_DLIMPORT
|
||||
|
||||
#undef uint
|
||||
#undef ulong
|
||||
|
||||
/* Define if you want to enable memory limit support */
|
||||
#define MEMORY_LIMIT 0
|
||||
])
|
||||
|
||||
AH_BOTTOM([
|
||||
#ifndef ZEND_ACCONFIG_H_NO_C_PROTOS
|
||||
|
||||
#ifdef HAVE_STDLIB_H
|
||||
# include <stdlib.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_TYPES_H
|
||||
# include <sys/types.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SELECT_H
|
||||
#include <sys/select.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_IEEEFP_H
|
||||
# include <ieeefp.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
# include <strings.h>
|
||||
#endif
|
||||
|
||||
#if ZEND_BROKEN_SPRINTF
|
||||
int zend_sprintf(char *buffer, const char *format, ...);
|
||||
#else
|
||||
# define zend_sprintf sprintf
|
||||
#endif
|
||||
|
||||
#include <math.h>
|
||||
|
||||
/* To enable the is_nan, is_infinite and is_finite PHP functions */
|
||||
#ifdef NETWARE
|
||||
#define HAVE_ISNAN 1
|
||||
#define HAVE_ISINF 1
|
||||
#define HAVE_ISFINITE 1
|
||||
#endif
|
||||
|
||||
#ifndef zend_isnan
|
||||
#ifdef HAVE_ISNAN
|
||||
#define zend_isnan(a) isnan(a)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isnan(a) ((fpclass(a) == FP_SNAN) || (fpclass(a) == FP_QNAN))
|
||||
#else
|
||||
#define zend_isnan(a) 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_ISINF
|
||||
#define zend_isinf(a) isinf(a)
|
||||
#elif defined(INFINITY)
|
||||
/* Might not work, but is required by ISO C99 */
|
||||
#define zend_isinf(a) (((a)==INFINITY)?1:0)
|
||||
#elif defined(HAVE_FPCLASS)
|
||||
#define zend_isinf(a) ((fpclass(a) == FP_PINF) || (fpclass(a) == FP_NINF))
|
||||
#else
|
||||
#define zend_isinf(a) 0
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_FINITE
|
||||
#define zend_finite(a) finite(a)
|
||||
#elif defined(HAVE_ISFINITE) || defined(isfinite)
|
||||
#define zend_finite(a) isfinite(a)
|
||||
#elif defined(fpclassify)
|
||||
#define zend_finite(a) ((fpclassify((a))!=FP_INFINITE&&fpclassify((a))!=FP_NAN)?1:0)
|
||||
#else
|
||||
#define zend_finite(a) (zend_isnan(a) ? 0 : zend_isinf(a) ? 0 : 1)
|
||||
#endif
|
||||
|
||||
#endif /* ifndef ZEND_ACCONFIG_H_NO_C_PROTOS */
|
||||
|
||||
#ifdef NETWARE
|
||||
#ifdef USE_WINSOCK
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SOCKLEN_T
|
||||
#/*This detection against winsock is of no use*/ undef HAVE_SYS_SOCKET_H
|
||||
#endif
|
||||
#endif
|
||||
])
|
||||
|
||||
dnl We want this one before the checks, so the checks can modify CFLAGS.
|
||||
test -z "$CFLAGS" && auto_cflags=1
|
||||
|
||||
|
||||
@@ -1,358 +0,0 @@
|
||||
<?php
|
||||
|
||||
function hallo() {
|
||||
}
|
||||
|
||||
function simpleucall($n) {
|
||||
for ($i = 0; $i < $n; $i++)
|
||||
hallo();
|
||||
}
|
||||
|
||||
function simpleudcall($n) {
|
||||
for ($i = 0; $i < $n; $i++)
|
||||
hallo2();
|
||||
}
|
||||
|
||||
function hallo2() {
|
||||
}
|
||||
|
||||
function simpleicall($n) {
|
||||
for ($i = 0; $i < $n; $i++)
|
||||
func_num_args();
|
||||
}
|
||||
|
||||
class Foo {
|
||||
static $a = 0;
|
||||
public $b = 0;
|
||||
const TEST = 0;
|
||||
|
||||
static function read_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = self::$a;
|
||||
}
|
||||
}
|
||||
|
||||
static function write_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
self::$a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static function isset_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = isset(self::$a);
|
||||
}
|
||||
}
|
||||
|
||||
static function empty_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = empty(self::$a);
|
||||
}
|
||||
}
|
||||
|
||||
static function f() {
|
||||
}
|
||||
|
||||
static function call_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
self::f();
|
||||
}
|
||||
}
|
||||
|
||||
function read_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $this->b;
|
||||
}
|
||||
}
|
||||
|
||||
function write_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function assign_add_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b += 2;
|
||||
}
|
||||
}
|
||||
|
||||
function pre_inc_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
++$this->b;
|
||||
}
|
||||
}
|
||||
|
||||
function pre_dec_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
--$this->b;
|
||||
}
|
||||
}
|
||||
|
||||
function post_inc_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b++;
|
||||
}
|
||||
}
|
||||
|
||||
function post_dec_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->b--;
|
||||
}
|
||||
}
|
||||
|
||||
function isset_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = isset($this->b);
|
||||
}
|
||||
}
|
||||
|
||||
function empty_prop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = empty($this->b);
|
||||
}
|
||||
}
|
||||
|
||||
function g() {
|
||||
}
|
||||
|
||||
function call($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$this->g();
|
||||
}
|
||||
}
|
||||
|
||||
function read_const($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $this::TEST;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function read_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = Foo::$a;
|
||||
}
|
||||
}
|
||||
|
||||
function write_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
Foo::$a = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function isset_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = isset(Foo::$a);
|
||||
}
|
||||
}
|
||||
|
||||
function empty_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = empty(Foo::$a);
|
||||
}
|
||||
}
|
||||
|
||||
function call_static($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
Foo::f();
|
||||
}
|
||||
}
|
||||
|
||||
function create_object($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = new Foo();
|
||||
}
|
||||
}
|
||||
|
||||
define('TEST', null);
|
||||
|
||||
function read_const($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = TEST;
|
||||
}
|
||||
}
|
||||
|
||||
function read_auto_global($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $_GET;
|
||||
}
|
||||
}
|
||||
|
||||
$g_var = 0;
|
||||
|
||||
function read_global_var($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $GLOBALS['g_var'];
|
||||
}
|
||||
}
|
||||
|
||||
function read_hash($n) {
|
||||
$hash = array('test' => 0);
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $hash['test'];
|
||||
}
|
||||
}
|
||||
|
||||
function read_str_offset($n) {
|
||||
$str = "test";
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $str[1];
|
||||
}
|
||||
}
|
||||
|
||||
function issetor($n) {
|
||||
$val = array(0,1,2,3,4,5,6,7,8,9);
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $val ?: null;
|
||||
}
|
||||
}
|
||||
|
||||
function issetor2($n) {
|
||||
$f = false; $j = 0;
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $f ?: $j + 1;
|
||||
}
|
||||
}
|
||||
|
||||
function ternary($n) {
|
||||
$val = array(0,1,2,3,4,5,6,7,8,9);
|
||||
$f = false;
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $f ? null : $val;
|
||||
}
|
||||
}
|
||||
|
||||
function ternary2($n) {
|
||||
$f = false; $j = 0;
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
$x = $f ? $f : $j + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/*****/
|
||||
|
||||
function empty_loop($n) {
|
||||
for ($i = 0; $i < $n; ++$i) {
|
||||
}
|
||||
}
|
||||
|
||||
function getmicrotime()
|
||||
{
|
||||
$t = gettimeofday();
|
||||
return ($t['sec'] + $t['usec'] / 1000000);
|
||||
}
|
||||
|
||||
function start_test()
|
||||
{
|
||||
ob_start();
|
||||
return getmicrotime();
|
||||
}
|
||||
|
||||
function end_test($start, $name, $overhead = null)
|
||||
{
|
||||
global $total;
|
||||
global $last_time;
|
||||
$end = getmicrotime();
|
||||
ob_end_clean();
|
||||
$last_time = $end-$start;
|
||||
$total += $last_time;
|
||||
$num = number_format($last_time,3);
|
||||
$pad = str_repeat(" ", 24-strlen($name)-strlen($num));
|
||||
if (is_null($overhead)) {
|
||||
echo $name.$pad.$num."\n";
|
||||
} else {
|
||||
$num2 = number_format($last_time - $overhead,3);
|
||||
echo $name.$pad.$num." ".$num2."\n";
|
||||
}
|
||||
ob_start();
|
||||
return getmicrotime();
|
||||
}
|
||||
|
||||
function total()
|
||||
{
|
||||
global $total;
|
||||
$pad = str_repeat("-", 24);
|
||||
echo $pad."\n";
|
||||
$num = number_format($total,3);
|
||||
$pad = str_repeat(" ", 24-strlen("Total")-strlen($num));
|
||||
echo "Total".$pad.$num."\n";
|
||||
}
|
||||
|
||||
const N = 5000000;
|
||||
|
||||
$t0 = $t = start_test();
|
||||
empty_loop(N);
|
||||
$t = end_test($t, 'empty_loop');
|
||||
$overhead = $last_time;
|
||||
simpleucall(N);
|
||||
$t = end_test($t, 'func()', $overhead);
|
||||
simpleudcall(N);
|
||||
$t = end_test($t, 'undef_func()', $overhead);
|
||||
simpleicall(N);
|
||||
$t = end_test($t, 'int_func()', $overhead);
|
||||
Foo::read_static(N);
|
||||
$t = end_test($t, '$x = self::$x', $overhead);
|
||||
Foo::write_static(N);
|
||||
$t = end_test($t, 'self::$x = 0', $overhead);
|
||||
Foo::isset_static(N);
|
||||
$t = end_test($t, 'isset(self::$x)', $overhead);
|
||||
Foo::empty_static(N);
|
||||
$t = end_test($t, 'empty(self::$x)', $overhead);
|
||||
read_static(N);
|
||||
$t = end_test($t, '$x = Foo::$x', $overhead);
|
||||
write_static(N);
|
||||
$t = end_test($t, 'Foo::$x = 0', $overhead);
|
||||
isset_static(N);
|
||||
$t = end_test($t, 'isset(Foo::$x)', $overhead);
|
||||
empty_static(N);
|
||||
$t = end_test($t, 'empty(Foo::$x)', $overhead);
|
||||
Foo::call_static(N);
|
||||
$t = end_test($t, 'self::f()', $overhead);
|
||||
call_static(N);
|
||||
$t = end_test($t, 'Foo::f()', $overhead);
|
||||
$x = new Foo();
|
||||
$x->read_prop(N);
|
||||
$t = end_test($t, '$x = $this->x', $overhead);
|
||||
$x->write_prop(N);
|
||||
$t = end_test($t, '$this->x = 0', $overhead);
|
||||
$x->assign_add_prop(N);
|
||||
$t = end_test($t, '$this->x += 2', $overhead);
|
||||
$x->pre_inc_prop(N);
|
||||
$t = end_test($t, '++$this->x', $overhead);
|
||||
$x->pre_dec_prop(N);
|
||||
$t = end_test($t, '--$this->x', $overhead);
|
||||
$x->post_inc_prop(N);
|
||||
$t = end_test($t, '$this->x++', $overhead);
|
||||
$x->post_dec_prop(N);
|
||||
$t = end_test($t, '$this->x--', $overhead);
|
||||
$x->isset_prop(N);
|
||||
$t = end_test($t, 'isset($this->x)', $overhead);
|
||||
$x->empty_prop(N);
|
||||
$t = end_test($t, 'empty($this->x)', $overhead);
|
||||
$x->call(N);
|
||||
$t = end_test($t, '$this->f()', $overhead);
|
||||
$x->read_const(N);
|
||||
$t = end_test($t, '$x = Foo::TEST', $overhead);
|
||||
create_object(N);
|
||||
$t = end_test($t, 'new Foo()', $overhead);
|
||||
read_const(N);
|
||||
$t = end_test($t, '$x = TEST', $overhead);
|
||||
read_auto_global(N);
|
||||
$t = end_test($t, '$x = $_GET', $overhead);
|
||||
read_global_var(N);
|
||||
$t = end_test($t, '$x = $GLOBALS[\'v\']', $overhead);
|
||||
read_hash(N);
|
||||
$t = end_test($t, '$x = $hash[\'v\']', $overhead);
|
||||
read_str_offset(N);
|
||||
$t = end_test($t, '$x = $str[0]', $overhead);
|
||||
issetor(N);
|
||||
$t = end_test($t, '$x = $a ?: null', $overhead);
|
||||
issetor2(N);
|
||||
$t = end_test($t, '$x = $f ?: tmp', $overhead);
|
||||
ternary(N);
|
||||
$t = end_test($t, '$x = $f ? $f : $a', $overhead);
|
||||
ternary2(N);
|
||||
$t = end_test($t, '$x = $f ? $f : tmp', $overhead);
|
||||
total($t0, "Total");
|
||||
+1
-1
@@ -21,5 +21,5 @@ print "ok\n";
|
||||
Notice: Trying to get property of non-object in %s on line %d
|
||||
ok
|
||||
|
||||
Warning: Creating default object from empty value in %s on line %d
|
||||
Strict Standards: Creating default object from empty value in %s on line %d
|
||||
ok
|
||||
+2
-2
@@ -26,6 +26,6 @@ Notice: Undefined variable: arr in %s on line %d
|
||||
|
||||
Notice: Trying to get property of non-object in %s on line %d
|
||||
|
||||
Warning: Creating default object from empty value in %s on line %d
|
||||
Strict Standards: Creating default object from empty value in %s on line %d
|
||||
|
||||
Warning: Creating default object from empty value in %s on line %d
|
||||
Strict Standards: Creating default object from empty value in %s on line %d
|
||||
@@ -1,16 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55719 (Argument restriction should come with a more specific error message)
|
||||
--FILE--
|
||||
<?php
|
||||
Class Base {
|
||||
public function &test($foo, array $bar, $option = NULL, $extra = "lllllllllllllllllllllllllllllllllllllllllllllllllll") {
|
||||
}
|
||||
}
|
||||
|
||||
class Sub extends Base {
|
||||
public function &test() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Strict Standards: Declaration of Sub::test() should be compatible with & Base::test($foo, array $bar, $option = NULL, $extra = 'llllllllll...') in %sargument_restriction_001.php on line %d
|
||||
@@ -1,16 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55719 (Argument restriction should come with a more specific error message)
|
||||
--FILE--
|
||||
<?php
|
||||
Abstract Class Base {
|
||||
public function test($foo, array &$bar, $option = NULL, $extra = 3.141592653589793238462643383279502884197169399375105 ) {
|
||||
}
|
||||
}
|
||||
|
||||
class Sub extends Base {
|
||||
public function test($foo, array &$bar) {
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Strict Standards: Declaration of Sub::test() should be compatible with Base::test($foo, array &$bar, $option = NULL, $extra = 3.1415926535898) in %sargument_restriction_002.php on line %d
|
||||
@@ -1,19 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55719 (Argument restriction should come with a more specific error message)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
}
|
||||
|
||||
Abstract Class Base {
|
||||
public function test(Foo $foo, array $bar, $option = NULL, $extra = "lllllllllllllllllllllllllllllllllllllllllllllllllll") {
|
||||
}
|
||||
}
|
||||
|
||||
class Sub extends Base {
|
||||
public function test() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Strict Standards: Declaration of Sub::test() should be compatible with Base::test(Foo $foo, array $bar, $option = NULL, $extra = 'llllllllll...') in %sargument_restriction_003.php on line %d
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55719 (Argument restriction should come with a more specific error message)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
}
|
||||
|
||||
Abstract Class Base {
|
||||
abstract public function test(Foo $foo, array $bar, $option = NULL, $extra = 16777215) ;
|
||||
}
|
||||
|
||||
class Sub extends Base {
|
||||
public function test(Foo $foo, array $bar, $option = NULL, $extra = 0xffffff ) {
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55719 (Argument restriction should come with a more specific error message)
|
||||
--FILE--
|
||||
<?php
|
||||
class Sub implements ArrayAccess {
|
||||
public function offsetSet() {
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Declaration of Sub::offsetSet() must be compatible with ArrayAccess::offsetSet($offset, $value) in %sargument_restriction_005.php on line %d
|
||||
@@ -1,16 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60174 (Notice when array in method prototype error)
|
||||
--FILE--
|
||||
<?php
|
||||
Abstract Class Base {
|
||||
public function test($foo, $extra = array("test")) {
|
||||
}
|
||||
}
|
||||
|
||||
class Sub extends Base {
|
||||
public function test($foo, $extra) {
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Strict Standards: Declaration of Sub::test() should be compatible with Base::test($foo, $extra = Array) in %sargument_restriction_006.php on line %d
|
||||
@@ -12,4 +12,4 @@ foo(123);
|
||||
--EXPECTF--
|
||||
3
|
||||
|
||||
Catchable fatal error: Argument 1 passed to foo() must be of the type array, integer given, called in %sarray_type_hint_001.php on line 7 and defined in %sarray_type_hint_001.php on line 2
|
||||
Catchable fatal error: Argument 1 passed to foo() must be an array, integer given, called in %sarray_type_hint_001.php on line 7 and defined in %sarray_type_hint_001.php on line 2
|
||||
@@ -1,154 +0,0 @@
|
||||
--TEST--
|
||||
testing binary literals
|
||||
--INI--
|
||||
precision=14
|
||||
--SKIPIF--
|
||||
<?php if (PHP_INT_SIZE != 4) die("skip this test is for 32bit platform only"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(0b1);
|
||||
var_dump(0b11);
|
||||
var_dump(0b111);
|
||||
var_dump(0b1111);
|
||||
var_dump(0b11111);
|
||||
var_dump(0b111111);
|
||||
var_dump(0b1111111);
|
||||
var_dump(0b11111111);
|
||||
var_dump(0b111111111);
|
||||
var_dump(0b1111111111);
|
||||
var_dump(0b11111111111);
|
||||
var_dump(0b111111111111);
|
||||
var_dump(0b1111111111111);
|
||||
var_dump(0b11111111111111);
|
||||
var_dump(0b111111111111111);
|
||||
var_dump(0b1111111111111111);
|
||||
var_dump(0b11111111111111111);
|
||||
var_dump(0b111111111111111111);
|
||||
var_dump(0b1111111111111111111);
|
||||
var_dump(0b11111111111111111111);
|
||||
var_dump(0b111111111111111111111);
|
||||
var_dump(0b1111111111111111111111);
|
||||
var_dump(0b11111111111111111111111);
|
||||
var_dump(0b111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111111111);
|
||||
|
||||
var_dump(-0b1111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(-0b111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(-0b11111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(-0b111111111111111111111111111111111);
|
||||
var_dump(-0b11111111111111111111111111111111);
|
||||
var_dump(-0b1111111111111111111111111111111);
|
||||
var_dump(-0b111111111111111111111111111111);
|
||||
var_dump(-0b1);
|
||||
--EXPECT--
|
||||
int(1)
|
||||
int(3)
|
||||
int(7)
|
||||
int(15)
|
||||
int(31)
|
||||
int(63)
|
||||
int(127)
|
||||
int(255)
|
||||
int(511)
|
||||
int(1023)
|
||||
int(2047)
|
||||
int(4095)
|
||||
int(8191)
|
||||
int(16383)
|
||||
int(32767)
|
||||
int(65535)
|
||||
int(131071)
|
||||
int(262143)
|
||||
int(524287)
|
||||
int(1048575)
|
||||
int(2097151)
|
||||
int(4194303)
|
||||
int(8388607)
|
||||
int(16777215)
|
||||
int(33554431)
|
||||
int(67108863)
|
||||
int(134217727)
|
||||
int(268435455)
|
||||
int(536870911)
|
||||
int(1073741823)
|
||||
int(2147483647)
|
||||
float(4294967295)
|
||||
float(8589934591)
|
||||
float(17179869183)
|
||||
float(34359738367)
|
||||
float(68719476735)
|
||||
float(137438953471)
|
||||
float(274877906943)
|
||||
float(549755813887)
|
||||
float(1099511627775)
|
||||
float(2199023255551)
|
||||
float(4398046511103)
|
||||
float(8796093022207)
|
||||
float(17592186044415)
|
||||
float(35184372088831)
|
||||
float(70368744177663)
|
||||
float(1.4073748835533E+14)
|
||||
float(2.8147497671066E+14)
|
||||
float(5.6294995342131E+14)
|
||||
float(1.1258999068426E+15)
|
||||
float(2.2517998136852E+15)
|
||||
float(4.5035996273705E+15)
|
||||
float(9.007199254741E+15)
|
||||
float(1.8014398509482E+16)
|
||||
float(3.6028797018964E+16)
|
||||
float(7.2057594037928E+16)
|
||||
float(1.4411518807586E+17)
|
||||
float(2.8823037615171E+17)
|
||||
float(5.7646075230342E+17)
|
||||
float(1.1529215046068E+18)
|
||||
float(2.3058430092137E+18)
|
||||
float(4.6116860184274E+18)
|
||||
float(9.2233720368548E+18)
|
||||
float(1.844674407371E+19)
|
||||
float(-1.844674407371E+19)
|
||||
float(-9.2233720368548E+18)
|
||||
float(-4.6116860184274E+18)
|
||||
float(-8589934591)
|
||||
float(-4294967295)
|
||||
int(-2147483647)
|
||||
int(-1073741823)
|
||||
int(-1)
|
||||
@@ -1,154 +0,0 @@
|
||||
--TEST--
|
||||
testing binary literals
|
||||
--INI--
|
||||
precision=32
|
||||
--SKIPIF--
|
||||
<?php if (PHP_INT_SIZE != 8) die("skip this test is for 64bit platform only"); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(0b1);
|
||||
var_dump(0b11);
|
||||
var_dump(0b111);
|
||||
var_dump(0b1111);
|
||||
var_dump(0b11111);
|
||||
var_dump(0b111111);
|
||||
var_dump(0b1111111);
|
||||
var_dump(0b11111111);
|
||||
var_dump(0b111111111);
|
||||
var_dump(0b1111111111);
|
||||
var_dump(0b11111111111);
|
||||
var_dump(0b111111111111);
|
||||
var_dump(0b1111111111111);
|
||||
var_dump(0b11111111111111);
|
||||
var_dump(0b111111111111111);
|
||||
var_dump(0b1111111111111111);
|
||||
var_dump(0b11111111111111111);
|
||||
var_dump(0b111111111111111111);
|
||||
var_dump(0b1111111111111111111);
|
||||
var_dump(0b11111111111111111111);
|
||||
var_dump(0b111111111111111111111);
|
||||
var_dump(0b1111111111111111111111);
|
||||
var_dump(0b11111111111111111111111);
|
||||
var_dump(0b111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b111111111111111111111111111111111111111111111111111111111111111 + 1);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b1111111111111111111111111111111111111111111111111111111111111111 + 1);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(0b11111111111111111111111111111111111111111111111111111111111111111 + 1);
|
||||
|
||||
var_dump(-0b1111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(-0b111111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(-0b11111111111111111111111111111111111111111111111111111111111111);
|
||||
var_dump(-0b1);
|
||||
--EXPECT--
|
||||
int(1)
|
||||
int(3)
|
||||
int(7)
|
||||
int(15)
|
||||
int(31)
|
||||
int(63)
|
||||
int(127)
|
||||
int(255)
|
||||
int(511)
|
||||
int(1023)
|
||||
int(2047)
|
||||
int(4095)
|
||||
int(8191)
|
||||
int(16383)
|
||||
int(32767)
|
||||
int(65535)
|
||||
int(131071)
|
||||
int(262143)
|
||||
int(524287)
|
||||
int(1048575)
|
||||
int(2097151)
|
||||
int(4194303)
|
||||
int(8388607)
|
||||
int(16777215)
|
||||
int(33554431)
|
||||
int(67108863)
|
||||
int(134217727)
|
||||
int(268435455)
|
||||
int(536870911)
|
||||
int(1073741823)
|
||||
int(2147483647)
|
||||
int(4294967295)
|
||||
int(8589934591)
|
||||
int(17179869183)
|
||||
int(34359738367)
|
||||
int(68719476735)
|
||||
int(137438953471)
|
||||
int(274877906943)
|
||||
int(549755813887)
|
||||
int(1099511627775)
|
||||
int(2199023255551)
|
||||
int(4398046511103)
|
||||
int(8796093022207)
|
||||
int(17592186044415)
|
||||
int(35184372088831)
|
||||
int(70368744177663)
|
||||
int(140737488355327)
|
||||
int(281474976710655)
|
||||
int(562949953421311)
|
||||
int(1125899906842623)
|
||||
int(2251799813685247)
|
||||
int(4503599627370495)
|
||||
int(9007199254740991)
|
||||
int(18014398509481983)
|
||||
int(36028797018963967)
|
||||
int(72057594037927935)
|
||||
int(144115188075855871)
|
||||
int(288230376151711743)
|
||||
int(576460752303423487)
|
||||
int(1152921504606846975)
|
||||
int(2305843009213693951)
|
||||
int(4611686018427387903)
|
||||
int(9223372036854775807)
|
||||
float(9223372036854775808)
|
||||
float(18446744073709549568)
|
||||
float(18446744073709549568)
|
||||
float(36893488147419099136)
|
||||
float(36893488147419099136)
|
||||
float(-18446744073709549568)
|
||||
int(-9223372036854775807)
|
||||
int(-4611686018427387903)
|
||||
int(-1)
|
||||
@@ -17,12 +17,13 @@ var_dump(isset($a['b']));
|
||||
|
||||
$simpleString = "Bogus String Text";
|
||||
echo isset($simpleString->wrong)?"bug\n":"ok\n";
|
||||
echo isset($simpleString["wrong"])?"bug\n":"ok\n";
|
||||
echo isset($simpleString["wrong"])?"ok\n":"bug\n";
|
||||
echo isset($simpleString[-1])?"bug\n":"ok\n";
|
||||
echo isset($simpleString[0])?"ok\n":"bug\n";
|
||||
echo isset($simpleString["0"])?"ok\n":"bug\n";
|
||||
echo isset($simpleString["16"])?"ok\n":"bug\n";
|
||||
echo isset($simpleString["17"])?"bug\n":"ok\n";
|
||||
echo isset($simpleString["wrong"][0])?"bug\n":"ok\n";
|
||||
echo $simpleString->wrong === null?"ok\n":"bug\n";
|
||||
echo $simpleString["wrong"] === "B"?"ok\n":"bug\n";
|
||||
echo $simpleString["0"] === "B"?"ok\n":"bug\n";
|
||||
@@ -34,8 +35,9 @@ bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(true)
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
@@ -44,12 +46,8 @@ ok
|
||||
ok
|
||||
ok
|
||||
|
||||
Notice: Trying to get property of non-object in %s on line %d
|
||||
Notice: Trying to get property of non-object in %sbug31098.php on line %d
|
||||
ok
|
||||
|
||||
Warning: Illegal string offset 'wrong' in %s on line %d
|
||||
ok
|
||||
ok
|
||||
ok
|
||||
|
||||
Warning: Illegal string offset 'wrong' in %s on line %d
|
||||
ok
|
||||
@@ -1,7 +1,7 @@
|
||||
--TEST--
|
||||
Bug #34199 (if($obj)/if(!$obj) inconsistency because of cast handler)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("simplexml")) print "skip SimpleXML extension required"; ?>
|
||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
$xml = "<root></root>";
|
||||
|
||||
@@ -4,6 +4,7 @@ Bug #35655 (whitespace following end of heredoc is lost)
|
||||
highlight.string = #DD0000
|
||||
highlight.comment = #FF8000
|
||||
highlight.keyword = #007700
|
||||
highlight.bg = #FFFFFF
|
||||
highlight.default = #0000BB
|
||||
highlight.html = #000000
|
||||
--FILE--
|
||||
|
||||
@@ -6,7 +6,7 @@ Bug #39018 (Error control operator '@' fails to suppress "Uninitialized string o
|
||||
error_reporting(E_ALL);
|
||||
|
||||
$a = 'foo';
|
||||
$a[111111111111111111111];
|
||||
$a[11111111111];
|
||||
|
||||
$a = '';
|
||||
|
||||
@@ -62,42 +62,21 @@ print "\nDone\n";
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %s on line %d
|
||||
Notice: Uninitialized string offset: 0 in %s on line 12
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %s on line %d
|
||||
Notice: Uninitialized string offset: %i in %s on line 16
|
||||
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
Notice: Uninitialized string offset: 4 in %s on line 28
|
||||
|
||||
Notice: Uninitialized string offset: %i in %s on line %d
|
||||
Notice: Uninitialized string offset: 4 in %s on line 34
|
||||
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
Notice: Uninitialized string offset: 4 in %s on line 38
|
||||
|
||||
Notice: Uninitialized string offset: %i in %s on line %d
|
||||
Notice: Uninitialized string offset: 4 in %s on line 42
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %s on line %d
|
||||
Notice: Uninitialized string offset: 4 in %s on line 46
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 4 in %s on line %d
|
||||
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 12 in %s on line %d
|
||||
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 12 in %s on line %d
|
||||
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
|
||||
Notice: String offset cast occured in %s on line %d
|
||||
Notice: Uninitialized string offset: 12 in %s on line 52
|
||||
b
|
||||
Done
|
||||
@@ -4,13 +4,8 @@ Bug #39304 (Segmentation fault with list unpacking of string offset)
|
||||
<?php
|
||||
$s = "";
|
||||
list($a, $b) = $s[0];
|
||||
echo "I am alive";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304.php on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 1 in %sbug39304.php on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304.php on line %d
|
||||
I am alive
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304.php on line 3
|
||||
|
||||
Fatal error: Cannot use string offset as an array in %sbug39304.php on line 3
|
||||
@@ -1,18 +0,0 @@
|
||||
--TEST--
|
||||
Bug #39304 (Segmentation fault with list unpacking of string offset)
|
||||
--SKIPIF--
|
||||
<?php if (version_compare(zend_version(), '2.4.0', '<')) die('skip ZendEngine 2.4 needed'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
$s = "";
|
||||
list($a, $b) = $s[0];
|
||||
var_dump($a,$b);
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 1 in %sbug39304_2_4.php on line %d
|
||||
|
||||
Notice: Uninitialized string offset: 0 in %sbug39304_2_4.php on line %d
|
||||
string(0) ""
|
||||
string(0) ""
|
||||
@@ -1,7 +1,7 @@
|
||||
--TEST--
|
||||
Bug #39602 (Invalid session.save_handler crashes PHP)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("session")) die("skip session extension required"); ?>
|
||||
<?php if (!extension_loaded("session")) die("skip"); ?>
|
||||
--INI--
|
||||
session.save_handler=qwerty
|
||||
error_reporting=0
|
||||
|
||||
@@ -4,6 +4,7 @@ Bug #42767 (highlight_string() truncates trailing comments)
|
||||
highlight.string = #DD0000
|
||||
highlight.comment = #FF8000
|
||||
highlight.keyword = #007700
|
||||
highlight.bg = #FFFFFF
|
||||
highlight.default = #0000BB
|
||||
highlight.html = #000000
|
||||
--FILE--
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
--TEST--
|
||||
Bug #42819 (namespaces in indexes of constant arrays)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("spl")) print "skip SPL extension required"; ?>
|
||||
<?php if (!extension_loaded("spl")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
namespace foo\foo;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
--TEST--
|
||||
Bug #43918 (Segmentation fault in garbage collector)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded("simplexml")) print "skip SimpleXML extension required"; ?>
|
||||
<?php if (!extension_loaded("simplexml")) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
$xmlstr = <<<XML
|
||||
|
||||
@@ -14,4 +14,6 @@ class b implements a { function f($a=1) {}}
|
||||
class c extends b {function f() {}}
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(60) "Declaration of c::f() should be compatible with b::f($a = 1)"
|
||||
string(62) "Declaration of c::f() should be compatible with that of b::f()"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
--TEST--
|
||||
Bug #50174 (Incorrectly matched docComment)
|
||||
--SKIPIF--
|
||||
<?php if (!extension_loaded('reflection') || !extension_loaded('spl')) print "skip SPL and reflection extensions required"; ?>
|
||||
<?php if (!extension_loaded('reflection') || !extension_loaded('spl')) print "skip"; ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
--TEST--
|
||||
Bug #51421 (Abstract __construct constructor argument list not enforced)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class ExampleClass {}
|
||||
|
||||
abstract class TestInterface {
|
||||
abstract public function __construct(ExampleClass $var);
|
||||
}
|
||||
|
||||
class Test extends TestInterface {
|
||||
public function __construct() {}
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Declaration of Test::__construct() must be compatible with TestInterface::__construct(ExampleClass $var) in %s on line %d
|
||||
+12
-37
@@ -13,63 +13,38 @@ foo()->a->b++;
|
||||
foo()->a += 2;
|
||||
foo()->a->b += 2;
|
||||
|
||||
foo()[0] = 1;
|
||||
foo()[0][0] = 2;
|
||||
foo()[0]++;
|
||||
foo()[0][0]++;
|
||||
foo()[0] += 2;
|
||||
foo()[0][0] += 2;
|
||||
|
||||
//foo()[0] = 1;
|
||||
//foo()[0][0] = 2;
|
||||
//foo()[0]++;
|
||||
//foo()[0][0]++;
|
||||
//foo()[0] += 2;
|
||||
//foo()[0][0] += 2;
|
||||
var_dump(foo());
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 6
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 6
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 7
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 7
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 8
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 8
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 9
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 9
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 10
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 10
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52041.php on line 11
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 15
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 16
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 16
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 17
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 18
|
||||
|
||||
Notice: Undefined offset: 0 in %sbug52041.php on line 18
|
||||
Strict Standards: Creating default object from empty value in %sbug52041.php on line 11
|
||||
|
||||
Notice: Undefined variable: x in %sbug52041.php on line 3
|
||||
NULL
|
||||
@@ -7,6 +7,5 @@ preg_match('//', '', $data->info);
|
||||
var_dump($data);
|
||||
?>
|
||||
--EXPECTF--
|
||||
|
||||
Warning: Attempt to modify property of non-object in %sbug52237.php on line 3
|
||||
string(4) "test"
|
||||
@@ -1,83 +0,0 @@
|
||||
--TEST--
|
||||
Bug #52614 (Memory leak when writing on uninitialized variable returned from method call)
|
||||
--FILE--
|
||||
<?php
|
||||
class foo {
|
||||
public $a1;
|
||||
public $a2 = array();
|
||||
public $a3;
|
||||
public $o1;
|
||||
public $o2;
|
||||
|
||||
public function f1() {
|
||||
return $this->a1;
|
||||
}
|
||||
|
||||
public function f2() {
|
||||
return $this->a2;
|
||||
}
|
||||
|
||||
public function f3() {
|
||||
$this->a3 = array();
|
||||
return $this->a3;
|
||||
}
|
||||
|
||||
public function f4() {
|
||||
return $this->o1;
|
||||
}
|
||||
|
||||
public function f5() {
|
||||
$this->o2 = new stdClass;
|
||||
return $this->o2;
|
||||
}
|
||||
|
||||
public function &f6() {
|
||||
return $this->a1;
|
||||
}
|
||||
|
||||
public function f7(&$x) {
|
||||
$x = 2;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
$foo = new foo;
|
||||
|
||||
$foo->f1()[0] = 1;
|
||||
var_dump($foo->a1);
|
||||
|
||||
$foo->f2()[0] = 1;
|
||||
var_dump($foo->a2);
|
||||
|
||||
$foo->f3()[0] = 1;
|
||||
var_dump($foo->a3);
|
||||
|
||||
$foo->f4()->a = 1;
|
||||
var_dump($foo->o1);
|
||||
|
||||
$foo->f5()->a = 1;
|
||||
var_dump($foo->o2);
|
||||
|
||||
$foo->a1[0] = 1;
|
||||
$foo->f7($foo->f6()[0]);
|
||||
var_dump($foo->a1[0]);
|
||||
$foo->f1()[0]++;
|
||||
var_dump($foo->a1[0]);
|
||||
$foo->f6()[0]++;
|
||||
var_dump($foo->a1[0]);
|
||||
--EXPECTF--
|
||||
NULL
|
||||
array(0) {
|
||||
}
|
||||
array(0) {
|
||||
}
|
||||
|
||||
Warning: Creating default object from empty value in %sbug52614.php on line 52
|
||||
NULL
|
||||
object(stdClass)#%d (1) {
|
||||
["a"]=>
|
||||
int(1)
|
||||
}
|
||||
int(2)
|
||||
int(2)
|
||||
int(3)
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Bug #52940 (call_user_func_array still allows call-time pass-by-reference)
|
||||
--FILE--
|
||||
<?php
|
||||
function foo($a) {
|
||||
$a++;
|
||||
var_dump($a);
|
||||
}
|
||||
function bar(&$a) {
|
||||
$a++;
|
||||
var_dump($a);
|
||||
}
|
||||
$a = 1;
|
||||
call_user_func_array("foo", array(&$a));
|
||||
var_dump($a);
|
||||
call_user_func_array("bar", array(&$a));
|
||||
var_dump($a);
|
||||
?>
|
||||
--EXPECT--
|
||||
int(2)
|
||||
int(1)
|
||||
int(2)
|
||||
int(2)
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53347 Segfault accessing static method
|
||||
--FILE--
|
||||
<?php class ezcConsoleOutput
|
||||
{
|
||||
protected static $color = array( 'gray' => 30 );
|
||||
|
||||
public static function isValidFormatCode( $type, $key )
|
||||
{
|
||||
return isset( self::${$type}[$key] );
|
||||
}
|
||||
}
|
||||
|
||||
var_dump( ezcConsoleOutput::isValidFormatCode( 'color', 'gray' ) );
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(true)
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53511 (Exceptions are lost in case an exception is thrown in catch operator)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
function __destruct() {
|
||||
throw new Exception("ops 1");
|
||||
}
|
||||
}
|
||||
|
||||
function test() {
|
||||
$e = new Foo();
|
||||
try {
|
||||
throw new Exception("ops 2");
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage()."\n";
|
||||
}
|
||||
}
|
||||
|
||||
test();
|
||||
echo "bug\n";
|
||||
--EXPECTF--
|
||||
Fatal error: Uncaught exception 'Exception' with message 'ops 2' in %sbug53511.php:11
|
||||
Stack trace:
|
||||
#0 %sbug53511.php(17): test()
|
||||
#1 {main}
|
||||
|
||||
Next exception 'Exception' with message 'ops 1' in %sbug53511.php:4
|
||||
Stack trace:
|
||||
#0 %sbug53511.php(12): Foo->__destruct()
|
||||
#1 %sbug53511.php(17): test()
|
||||
#2 {main}
|
||||
thrown in %sbug53511.php on line 4
|
||||
@@ -1,39 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53748 (Using traits lead to a segmentation fault)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
trait Singleton {
|
||||
protected static $instances=array();
|
||||
abstract protected function __construct($config);
|
||||
public static function getInstance($config) {
|
||||
if (!isset(self::$instances[$serialize = serialize($config)])) {
|
||||
self::$instances[$serialize] = new self($config);
|
||||
}
|
||||
return self::$instances[$serialize];
|
||||
}
|
||||
}
|
||||
|
||||
class MyHelloWorld {
|
||||
use Singleton;
|
||||
public function __construct($config)
|
||||
{
|
||||
var_dump( $config);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
$o= myHelloWorld::getInstance(1);
|
||||
$o= myHelloWorld::getInstance(1);
|
||||
$o= myHelloWorld::getInstance(2);
|
||||
$o= myHelloWorld::getInstance(array(1=>2));
|
||||
$o= myHelloWorld::getInstance(array(1=>2));
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
int(1)
|
||||
int(2)
|
||||
array(1) {
|
||||
[1]=>
|
||||
int(2)
|
||||
}
|
||||
@@ -9,7 +9,7 @@ $simpleString["wrong"] = "f";
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(false)
|
||||
bool(true)
|
||||
|
||||
Warning: Attempt to modify property of non-object in %sbug54262.php on line 4
|
||||
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55086 (Namespace alias does not work inside trait's use block)
|
||||
--FILE--
|
||||
<?php
|
||||
namespace N1 {
|
||||
|
||||
trait T1 {
|
||||
public function hello() { return 'hello from t1'; }
|
||||
}
|
||||
|
||||
trait T2 {
|
||||
public function hello() { return 'hello from t2'; }
|
||||
}
|
||||
|
||||
}
|
||||
namespace N2 {
|
||||
use N1\T1;
|
||||
use N1\T2;
|
||||
class A {
|
||||
use T1, T2 {
|
||||
T1::hello insteadof T2;
|
||||
T1::hello as foo;
|
||||
}
|
||||
}
|
||||
$a = new A;
|
||||
echo $a->hello(), PHP_EOL;
|
||||
echo $a->foo(), PHP_EOL;
|
||||
try {
|
||||
} catch(namespace \Foo $e)
|
||||
{
|
||||
}
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
hello from t1
|
||||
hello from t1
|
||||
@@ -1,38 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55135 (Array keys are no longer type casted in unset())
|
||||
--FILE--
|
||||
<?php
|
||||
// This fails.
|
||||
$array = array(1 => 2);
|
||||
$a = "1";
|
||||
unset($array[$a]);
|
||||
print_r($array);
|
||||
|
||||
// Those works.
|
||||
$array = array(1 => 2);
|
||||
$a = 1;
|
||||
unset($array[$a]);
|
||||
print_r($array);
|
||||
|
||||
$array = array(1 => 2);
|
||||
unset($array[1]);
|
||||
print_r($array);
|
||||
|
||||
$array = array(1 => 2);
|
||||
$a = 1;
|
||||
unset($array["1"]);
|
||||
print_r($array);
|
||||
?>
|
||||
--EXPECT--
|
||||
Array
|
||||
(
|
||||
)
|
||||
Array
|
||||
(
|
||||
)
|
||||
Array
|
||||
(
|
||||
)
|
||||
Array
|
||||
(
|
||||
)
|
||||
@@ -1,26 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55137 (Changing trait static method visibility)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
trait A {
|
||||
protected static function foo() { echo "abc\n"; }
|
||||
private static function bar() { echo "def\n"; }
|
||||
}
|
||||
|
||||
|
||||
class B {
|
||||
use A {
|
||||
A::foo as public;
|
||||
A::bar as public baz;
|
||||
}
|
||||
}
|
||||
|
||||
B::foo();
|
||||
B::baz();
|
||||
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
abc
|
||||
def
|
||||
@@ -1,33 +0,0 @@
|
||||
--TEST--
|
||||
Request #55247 (Parser problem with static calls using string method name)
|
||||
--FILE--
|
||||
<?php
|
||||
class Test{
|
||||
public static function __callStatic($method, $arguments)
|
||||
{
|
||||
echo $method . PHP_EOL;
|
||||
}
|
||||
public function __call($method, $arguments)
|
||||
{
|
||||
echo $method . PHP_EOL;
|
||||
}
|
||||
}
|
||||
|
||||
$method = 'method';
|
||||
|
||||
$test = new Test();
|
||||
|
||||
$test->method();
|
||||
$test->$method();
|
||||
$test->{'method'}();
|
||||
|
||||
Test::method();
|
||||
Test::$method();
|
||||
Test::{'method'}();
|
||||
--EXPECT--
|
||||
method
|
||||
method
|
||||
method
|
||||
method
|
||||
method
|
||||
method
|
||||
@@ -1,16 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55305 (ref lost: 1st ref instantiated in class def, 2nd ref made w/o instantiating)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
var $foo = "test";
|
||||
}
|
||||
|
||||
$f = new Foo();
|
||||
$f->bar =& $f->foo;
|
||||
var_dump($f->foo);
|
||||
var_dump($f->bar);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(4) "test"
|
||||
string(4) "test"
|
||||
@@ -0,0 +1,31 @@
|
||||
--TEST--
|
||||
Bug #55339 (Segfault with allow_call_time_pass_reference = Off)
|
||||
--INI--
|
||||
allow_call_time_pass_reference=off
|
||||
--FILE--
|
||||
<?php
|
||||
function error_handler($errno, $errstr, $errfile, $errline) {
|
||||
eval(';');
|
||||
}
|
||||
|
||||
set_error_handler('error_handler');
|
||||
|
||||
eval(<<<'EOF'
|
||||
function foo()
|
||||
{
|
||||
$array = array();
|
||||
foreach ($array as $key => $value) {
|
||||
bar($key, &$value);
|
||||
}
|
||||
}
|
||||
|
||||
function bar()
|
||||
{
|
||||
|
||||
}
|
||||
EOF
|
||||
);
|
||||
|
||||
echo "OK\n";
|
||||
--EXPECT--
|
||||
OK
|
||||
@@ -1,8 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55445 (Lexer error with short open tags)
|
||||
--INI--
|
||||
short_open_tag=0
|
||||
--FILE--
|
||||
<?php $u = "chris"; ?><p>Welcome <?= $u ?></p>
|
||||
--EXPECTF--
|
||||
<p>Welcome chris</p>
|
||||
@@ -1,20 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55578 (Segfault on implode/concat)
|
||||
--FILE--
|
||||
<?php
|
||||
$options = array();
|
||||
|
||||
class Foo {
|
||||
public function __toString() {
|
||||
return 'Foo';
|
||||
}
|
||||
}
|
||||
|
||||
function test($options, $queryPart) {
|
||||
return ''. (0 ? 1 : $queryPart);
|
||||
}
|
||||
|
||||
var_dump(test($options, new Foo()));
|
||||
?>
|
||||
--EXPECT--
|
||||
string(3) "Foo"
|
||||
@@ -1,9 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55705 (Omitting a callable typehinted argument causes a segfault)
|
||||
--FILE--
|
||||
<?php
|
||||
function f(callable $c) {}
|
||||
f();
|
||||
?>
|
||||
--EXPECTF--
|
||||
Catchable fatal error: Argument 1 passed to f() must be callable, none given, called in %s on line 3 and defined in %s on line %d
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55825 (Missing initial value of static locals in trait methods)
|
||||
--FILE--
|
||||
<?php
|
||||
trait T1 {
|
||||
public function inc() {
|
||||
static $x=1;
|
||||
echo $x++ . "\n";
|
||||
}
|
||||
}
|
||||
class C { use T1; }
|
||||
$c1 = new C;
|
||||
$c1->inc();
|
||||
$c1->inc();
|
||||
--EXPECT--
|
||||
1
|
||||
2
|
||||
@@ -1,7 +1,5 @@
|
||||
--TEST--
|
||||
Bug #60139 (Anonymous functions create cycles not detected by the GC)
|
||||
--INI--
|
||||
zend.enable_gc=1
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
@@ -28,5 +26,5 @@ new Bar;
|
||||
var_dump(gc_collect_cycles());
|
||||
?>
|
||||
--EXPECT--
|
||||
int(2)
|
||||
int(0)
|
||||
int(2)
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60169 (Conjunction of ternary and list crashes PHP)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(0);
|
||||
$arr = array("test");
|
||||
list($a,$b) = is_array($arr)? $arr : $arr;
|
||||
list($c,$d) = is_array($arr)?: NULL;
|
||||
echo "ok\n";
|
||||
--EXPECT--
|
||||
ok
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60350 No string escape code for ESC (ascii 27), normally \e
|
||||
--FILE--
|
||||
<?php
|
||||
$str = "\e";
|
||||
if (ord($str) == 27) {
|
||||
echo "Works";
|
||||
}
|
||||
?>
|
||||
--EXPECT--
|
||||
Works
|
||||
@@ -1,74 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60362: non-existent sub-sub keys should not have values
|
||||
--FILE--
|
||||
<?php
|
||||
$arr = array('exists' => 'foz');
|
||||
|
||||
if (isset($arr['exists']['non_existent'])) {
|
||||
echo "sub-key 'non_existent' is set: ";
|
||||
var_dump($arr['exists']['non_existent']);
|
||||
} else {
|
||||
echo "sub-key 'non_existent' is not set.\n";
|
||||
}
|
||||
if (isset($arr['exists'][1])) {
|
||||
echo "sub-key 1 is set: ";
|
||||
var_dump($arr['exists'][1]);
|
||||
} else {
|
||||
echo "sub-key 1 is not set.\n";
|
||||
}
|
||||
|
||||
echo "-------------------\n";
|
||||
if (isset($arr['exists']['non_existent']['sub_sub'])) {
|
||||
echo "sub-key 'sub_sub' is set: ";
|
||||
var_dump($arr['exists']['non_existent']['sub_sub']);
|
||||
} else {
|
||||
echo "sub-sub-key 'sub_sub' is not set.\n";
|
||||
}
|
||||
if (isset($arr['exists'][1][0])) {
|
||||
echo "sub-sub-key 0 is set: ";
|
||||
var_dump($arr['exists'][1][0]);
|
||||
} else {
|
||||
echo "sub-sub-key 0 is not set.\n";
|
||||
}
|
||||
|
||||
echo "-------------------\n";
|
||||
if (empty($arr['exists']['non_existent'])) {
|
||||
echo "sub-key 'non_existent' is empty.\n";
|
||||
} else {
|
||||
echo "sub-key 'non_existent' is not empty: ";
|
||||
var_dump($arr['exists']['non_existent']);
|
||||
}
|
||||
if (empty($arr['exists'][1])) {
|
||||
echo "sub-key 1 is empty.\n";
|
||||
} else {
|
||||
echo "sub-key 1 is not empty: ";
|
||||
var_dump($arr['exists'][1]);
|
||||
}
|
||||
|
||||
echo "-------------------\n";
|
||||
if (empty($arr['exists']['non_existent']['sub_sub'])) {
|
||||
echo "sub-sub-key 'sub_sub' is empty.\n";
|
||||
} else {
|
||||
echo "sub-sub-key 'sub_sub' is not empty: ";
|
||||
var_dump($arr['exists']['non_existent']['sub_sub']);
|
||||
}
|
||||
if (empty($arr['exists'][1][0])) {
|
||||
echo "sub-sub-key 0 is empty.\n";
|
||||
} else {
|
||||
echo "sub-sub-key 0 is not empty: ";
|
||||
var_dump($arr['exists'][1][0]);
|
||||
}
|
||||
echo "DONE";
|
||||
--EXPECT--
|
||||
sub-key 'non_existent' is not set.
|
||||
sub-key 1 is set: string(1) "o"
|
||||
-------------------
|
||||
sub-sub-key 'sub_sub' is not set.
|
||||
sub-sub-key 0 is set: string(1) "o"
|
||||
-------------------
|
||||
sub-key 'non_existent' is empty.
|
||||
sub-key 1 is not empty: string(1) "o"
|
||||
-------------------
|
||||
sub-sub-key 'sub_sub' is empty.
|
||||
sub-sub-key 0 is not empty: string(1) "o"
|
||||
DONE
|
||||
@@ -1,18 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60444 (Segmentation fault with include & class extending)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo {
|
||||
public function __construct() {
|
||||
eval("class Bar extends Foo {}");
|
||||
Some::foo($this);
|
||||
}
|
||||
}
|
||||
class Some {
|
||||
public static function foo(Foo $foo) {
|
||||
}
|
||||
}
|
||||
new Foo;
|
||||
echo "done\n";
|
||||
--EXPECT--
|
||||
done
|
||||
@@ -1,25 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60536 (Traits Segfault)
|
||||
--FILE--
|
||||
<?php
|
||||
trait T { private $x = 0; }
|
||||
class X {
|
||||
use T;
|
||||
}
|
||||
class Y extends X {
|
||||
use T;
|
||||
function x() {
|
||||
return ++$this->x;
|
||||
}
|
||||
}
|
||||
class Z extends Y {
|
||||
function z() {
|
||||
return ++$this->x;
|
||||
}
|
||||
}
|
||||
$a = new Z();
|
||||
$a->x();
|
||||
echo "DONE";
|
||||
?>
|
||||
--EXPECTF--
|
||||
DONE
|
||||
@@ -1,40 +0,0 @@
|
||||
--TEST--
|
||||
The same rules are applied for properties that are defined in the class hierarchy. Thus, if the properties are compatible, a notice is issued, if not a fatal error occures. (relevant with #60536)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
|
||||
class Base {
|
||||
private $hello;
|
||||
}
|
||||
|
||||
trait THello1 {
|
||||
private $hello;
|
||||
}
|
||||
|
||||
echo "PRE-CLASS-GUARD\n";
|
||||
class Notice extends Base {
|
||||
use THello1;
|
||||
private $hello;
|
||||
}
|
||||
echo "POST-CLASS-GUARD\n";
|
||||
|
||||
// now we do the test for a fatal error
|
||||
|
||||
class TraitsTest {
|
||||
use THello1;
|
||||
public $hello;
|
||||
}
|
||||
|
||||
echo "POST-CLASS-GUARD2\n";
|
||||
|
||||
$t = new TraitsTest;
|
||||
$t->hello = "foo";
|
||||
?>
|
||||
--EXPECTF--
|
||||
PRE-CLASS-GUARD
|
||||
|
||||
Strict Standards: Notice and THello1 define the same property ($hello) in the composition of Notice. This might be incompatible, to improve maintainability consider using accessor methods in traits instead. Class was composed in %s on line %d
|
||||
POST-CLASS-GUARD
|
||||
|
||||
Fatal error: TraitsTest and THello1 define the same property ($hello) in the composition of TraitsTest. However, the definition differs and is considered incompatible. Class was composed in %s on line %d
|
||||
@@ -1,46 +0,0 @@
|
||||
--TEST--
|
||||
Properties should be initialized correctly (relevant to #60536)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
|
||||
class BaseWithPropA {
|
||||
private $hello = 0;
|
||||
}
|
||||
|
||||
trait AHelloProperty {
|
||||
private $hello = 0;
|
||||
}
|
||||
|
||||
class BaseWithTPropB {
|
||||
use AHelloProperty;
|
||||
}
|
||||
|
||||
class SubclassA extends BaseWithPropA {
|
||||
use AHelloProperty;
|
||||
}
|
||||
|
||||
class SubclassB extends BaseWithTPropB {
|
||||
use AHelloProperty;
|
||||
}
|
||||
|
||||
$a = new SubclassA;
|
||||
var_dump($a);
|
||||
|
||||
$b = new SubclassB;
|
||||
var_dump($b);
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(SubclassA)#%d (2) {
|
||||
["hello":"SubclassA":private]=>
|
||||
int(0)
|
||||
["hello":"BaseWithPropA":private]=>
|
||||
int(0)
|
||||
}
|
||||
object(SubclassB)#%d (2) {
|
||||
["hello":"SubclassB":private]=>
|
||||
int(0)
|
||||
["hello":"BaseWithTPropB":private]=>
|
||||
int(0)
|
||||
}
|
||||
@@ -1,37 +0,0 @@
|
||||
--TEST--
|
||||
Introducing new private variables of the same name in a subclass is ok, and does not lead to any output. That is consitent with normal inheritance handling. (relevant to #60536)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
|
||||
class Base {
|
||||
private $hello;
|
||||
}
|
||||
|
||||
trait THello1 {
|
||||
private $hello;
|
||||
}
|
||||
|
||||
// Now we use the trait, which happens to introduce another private variable
|
||||
// but they are distinct, and not related to each other, so no warning.
|
||||
echo "PRE-CLASS-GUARD\n";
|
||||
class SameNameInSubClassNoNotice extends Base {
|
||||
use THello1;
|
||||
}
|
||||
echo "POST-CLASS-GUARD\n";
|
||||
|
||||
// now the same with a class that defines the property itself,
|
||||
// that should give the expected strict warning.
|
||||
|
||||
class Notice extends Base {
|
||||
use THello1;
|
||||
private $hello;
|
||||
}
|
||||
echo "POST-CLASS-GUARD2\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
PRE-CLASS-GUARD
|
||||
POST-CLASS-GUARD
|
||||
|
||||
Strict Standards: Notice and THello1 define the same property ($hello) in the composition of Notice. This might be incompatible, to improve maintainability consider using accessor methods in traits instead. Class was composed in %sbug60536_004.php on line %d
|
||||
POST-CLASS-GUARD2
|
||||
@@ -1,38 +0,0 @@
|
||||
--TEST--
|
||||
Introducing new private variables of the same name in a subclass is ok, and does not lead to any output. That is consitent with normal inheritance handling. (relevant to #60536)
|
||||
--FILE--
|
||||
<?php
|
||||
error_reporting(E_ALL | E_STRICT);
|
||||
|
||||
class Base {
|
||||
protected $hello;
|
||||
}
|
||||
|
||||
trait THello1 {
|
||||
protected $hello;
|
||||
}
|
||||
|
||||
// Protected and public are handle more strict with a warning then what is
|
||||
// expected from normal inheritance since they can have easier coliding semantics
|
||||
echo "PRE-CLASS-GUARD\n";
|
||||
class SameNameInSubClassProducesNotice extends Base {
|
||||
use THello1;
|
||||
}
|
||||
echo "POST-CLASS-GUARD\n";
|
||||
|
||||
// now the same with a class that defines the property itself, too.
|
||||
|
||||
class Notice extends Base {
|
||||
use THello1;
|
||||
protected $hello;
|
||||
}
|
||||
echo "POST-CLASS-GUARD2\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
PRE-CLASS-GUARD
|
||||
|
||||
Strict Standards: Base and THello1 define the same property ($hello) in the composition of SameNameInSubClassProducesNotice. This might be incompatible, to improve maintainability consider using accessor methods in traits instead. Class was composed in %s on line %d
|
||||
POST-CLASS-GUARD
|
||||
|
||||
Strict Standards: Notice and THello1 define the same property ($hello) in the composition of Notice. This might be incompatible, to improve maintainability consider using accessor methods in traits instead. Class was composed in %s on line %d
|
||||
POST-CLASS-GUARD2
|
||||
Binary file not shown.
@@ -1,84 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60573 (type hinting with "self" keyword causes weird errors)
|
||||
--FILE--
|
||||
<?php
|
||||
class Foo1 {
|
||||
|
||||
public function setSelf(self $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Bar1 extends Foo1 {
|
||||
|
||||
public function setSelf(parent $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Foo2 {
|
||||
|
||||
public function setSelf(Foo2 $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Bar2 extends Foo2 {
|
||||
|
||||
public function setSelf(parent $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Base {
|
||||
}
|
||||
|
||||
class Foo3 extends Base{
|
||||
|
||||
public function setSelf(parent $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Bar3 extends Foo3 {
|
||||
|
||||
public function setSelf(Base $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Foo4 {
|
||||
|
||||
public function setSelf(self $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Bar4 extends Foo4 {
|
||||
|
||||
public function setSelf(self $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Foo5 extends Base {
|
||||
|
||||
public function setSelf(parent $s) { }
|
||||
|
||||
}
|
||||
|
||||
class Bar5 extends Foo5 {
|
||||
|
||||
public function setSelf(parent $s) { }
|
||||
|
||||
}
|
||||
|
||||
abstract class Foo6 extends Base {
|
||||
|
||||
abstract public function setSelf(parent $s);
|
||||
|
||||
}
|
||||
|
||||
class Bar6 extends Foo6 {
|
||||
|
||||
public function setSelf(Foo6 $s) { }
|
||||
|
||||
}
|
||||
--EXPECTF--
|
||||
Strict Standards: Declaration of Bar4::setSelf() should be compatible with Foo4::setSelf(Foo4 $s) in %sbug60573.php on line %d
|
||||
|
||||
Strict Standards: Declaration of Bar5::setSelf() should be compatible with Foo5::setSelf(Base $s) in %sbug60573.php on line %d
|
||||
|
||||
Fatal error: Declaration of Bar6::setSelf() must be compatible with Foo6::setSelf(Base $s) in %sbug60573.php on line %d
|
||||
@@ -1,27 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60611 (Segmentation fault with Cls::{expr}() syntax)
|
||||
--FILE--
|
||||
<?php
|
||||
class Cls {
|
||||
function __call($name, $arg) {
|
||||
}
|
||||
static function __callStatic($name, $arg) {
|
||||
}
|
||||
}
|
||||
|
||||
$cls = new Cls;
|
||||
$cls->{0}();
|
||||
$cls->{1.0}();
|
||||
$cls->{true}();
|
||||
$cls->{false}();
|
||||
$cls->{null}();
|
||||
|
||||
Cls::{0}();
|
||||
Cls::{1.0}();
|
||||
Cls::{true}();
|
||||
Cls::{false}();
|
||||
Cls::{null}();
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Method name must be a string in %sbug60611.php on line %d
|
||||
@@ -1,18 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60613 (Segmentation fault with $cls->{expr}() syntax)
|
||||
--FILE--
|
||||
<?php
|
||||
class Cls {
|
||||
function __call($name, $arg) {
|
||||
}
|
||||
}
|
||||
|
||||
$cls = new Cls();
|
||||
$cls->{0}();
|
||||
$cls->{1.0}();
|
||||
$cls->{true}();
|
||||
$cls->{false}();
|
||||
$cls->{null}();
|
||||
echo "ok\n";
|
||||
--EXPECTF--
|
||||
Fatal error: Method name must be a string in %sbug60613.php on line %d
|
||||
@@ -1,9 +0,0 @@
|
||||
--TEST--
|
||||
test of larger than 8kb text file being parsed by require statement
|
||||
--FILE--
|
||||
<?php
|
||||
file_put_contents('test.php',str_repeat('passed, ',1024));
|
||||
require('test.php');
|
||||
?>
|
||||
--EXPECT--
|
||||
passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed, passed,Line truncated
|
||||
@@ -1,19 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60825 (Segfault when running symfony 2 tests)
|
||||
--DESCRIPTION--
|
||||
run this with valgrind
|
||||
--FILE--
|
||||
<?php
|
||||
class test {
|
||||
public static $x;
|
||||
public function __toString() {
|
||||
self::$x = $this;
|
||||
return __FILE__;
|
||||
}
|
||||
}
|
||||
$a = new test;
|
||||
require_once $a;
|
||||
debug_zval_dump(test::$x);
|
||||
?>
|
||||
--EXPECTF--
|
||||
string(%d) "%sbug60825.php" refcount(2)
|
||||
@@ -1,10 +0,0 @@
|
||||
--TEST--
|
||||
Bug #60978 (exit code incorrect)
|
||||
--FILE--
|
||||
<?php
|
||||
$php = getenv('TEST_PHP_EXECUTABLE');
|
||||
exec($php . ' -n -r "exit(2);"', $output, $exit_code);
|
||||
echo $exit_code;
|
||||
?>
|
||||
--EXPECT--
|
||||
2
|
||||
Loaded 100 of 2579 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user