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 | |
|---|---|---|---|
|
|
7d14f70776 |
No files matched your search
@@ -1,550 +1,5 @@
|
||||
PHP NEWS
|
||||
PHP NEWS
|
||||
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||
11 Aug 2011, PHP 5.3.7 RC5
|
||||
- Upgraded bundled SQLite to version 3.7.7.1. (Scott)
|
||||
|
||||
- Core
|
||||
. Fixed bug #55399 (parse_url() incorrectly treats ':' as a valid path).
|
||||
(Ilia)
|
||||
|
||||
- Imap extension:
|
||||
. Fixed bug #55313 (Number of retries not set when params specified).
|
||||
(kevin at kevinlocke dot name)
|
||||
|
||||
- MySQLi extension:
|
||||
. Fixed bug #55238 (SSL options set by mysqli_ssl_set ignored for MySQLi
|
||||
persistent connections). (Andrey)
|
||||
|
||||
- SOAP
|
||||
. Fixed bug #55323 (SoapClient segmentation fault when XSD_TYPEKIND_EXTENSION
|
||||
contains itself). (Dmitry)
|
||||
|
||||
|
||||
28 Jul 2011, PHP 5.3.7 RC4
|
||||
- Improved core functions:
|
||||
. Updated crypt_blowfish to 1.2. ((CVE-2011-2483) (Solar Designer)
|
||||
|
||||
- OpenSSL
|
||||
. openssl_encrypt()/openssl_decrypt() truncated keys of variable length
|
||||
ciphers to the OpenSSL default for the algorithm. (Scott)
|
||||
. On blocking SSL sockets respect the timeout option where possible.
|
||||
(Scott)
|
||||
|
||||
- Core
|
||||
. Fixed bug #55339 (Segfault with allow_call_time_pass_reference = Off).
|
||||
(Dmitry)
|
||||
. Fix bug #55295 [NEW]: popen_ex on windows, fixed possible heap overflow
|
||||
(Pierre)
|
||||
. Fixed bug #50816 (Using class constants in array definition fails).
|
||||
(Pierrick, Dmitry)
|
||||
|
||||
14 Jul 2011, PHP 5.3.7 RC3
|
||||
- Zend Engine:
|
||||
. Fixed bug #55156 (ReflectionClass::getDocComment() returns comment even
|
||||
though the class has none). (Felipe)
|
||||
|
||||
- Core
|
||||
. Removed warning when argument of is_a() or is_subclass_of() is not
|
||||
a known class. (Stas)
|
||||
. Fixed bug #55258 (Windows Version Detecting Error).
|
||||
( xiaomao5 at live dot com, Pierre)
|
||||
. Fixed bug #55187 (readlink returns weird characters when false result).
|
||||
(Pierre)
|
||||
. Fixed bug #55014 (Compile failure due to improper use of ctime_r()). (Ilia)
|
||||
. Fixed bug #54332 (Crash in zend_mm_check_ptr // Heap corruption). (Dmitry)
|
||||
. Fixed bug #54204 (Can't set a value with a PATH section in php.ini).
|
||||
(Pierre)
|
||||
. Fixed bug #54305 (Crash in gc_remove_zval_from_buffer). (Dmitry)
|
||||
. Fixed bug #53727 (Inconsistent behavior of is_subclass_of with interfaces)
|
||||
(Ralph Schindler, Dmitry)
|
||||
. Fixed buffer overflow on overlog salt in crypt(). (Clément LECIGNE, Stas)
|
||||
. Fixed bug #52935 (call exit in user_error_handler cause stream relate
|
||||
core). (Gustavo)
|
||||
|
||||
|
||||
- MCrypt
|
||||
. Change E_ERROR to E_WARNING in mcrypt_create_iv when not enough data
|
||||
has been fetched (Windows). (Pierre)
|
||||
. Fixed bug #55169 (mcrypt_create_iv always fails to gather sufficient random
|
||||
data on Windows). (Pierre)
|
||||
|
||||
- PDO DBlib:
|
||||
. Fixed bug #54329 (MSSql extension memory leak).
|
||||
(dotslashpok at gmail dot com)
|
||||
|
||||
30 Jun 2011, PHP 5.3.7 RC2
|
||||
- Core:
|
||||
. Fixed crash in error_log(). (Felipe) Reported by Mateusz Kocielski.
|
||||
. Fixed bug #55082 (var_export() doesn't escape properties properly).
|
||||
(Gustavo)
|
||||
|
||||
- DateTime extension:
|
||||
. Fixed bug where the DateTime object got changed while using date_diff().
|
||||
(Derick)
|
||||
|
||||
- DBA extension:
|
||||
. Supress warning on non-existent file open with Berkeley DB 5.2 (Chris Jones)
|
||||
|
||||
- PDO ODBC driver:
|
||||
. Fixed data type usage in 64bit. (leocsilva at gmail dot com)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Implemented FR #54499 (FPM ping and status_path should handle HEAD request). (fat)
|
||||
. Implemented FR #54172 (Overriding the pid file location of php-fpm). (fat)
|
||||
. Fixed missing Expires and Cache-Control headers for ping and status pages.
|
||||
(fat)
|
||||
. Fixed memory leak. (fat) Reported and fixed by Giovanni Giacobbi.
|
||||
. Fixed wrong value of log_level when invoking fpm with -tt. (fat)
|
||||
|
||||
- SPL extension:
|
||||
. Fixed bug #54971 (Wrong result when using iterator_to_array with use_keys
|
||||
on true). (Pierrick)
|
||||
|
||||
16 Jun 2011, PHP 5.3.7 RC1
|
||||
- Upgraded bundled SQLite to version 3.7.6.3. (Scott)
|
||||
- Upgraded bundled PCRE to version 8.12. (Scott)
|
||||
- Increased the backtrack limit from 100000 to 1000000 (Rasmus)
|
||||
|
||||
- Zend Engine:
|
||||
. Fixed bug #55007 (compiler fail after previous fail). (Felipe)
|
||||
. Fixed bug #54910 (Crash when calling call_user_func with unknown function
|
||||
name). (Dmitry)
|
||||
. Fixed bug #54804 (__halt_compiler and imported namespaces).
|
||||
(Pierrick, Felipe)
|
||||
. Fixed bug #54624 (class_alias and type hint). (Felipe)
|
||||
. Fixed bug #54585 (track_errors causes segfault). (Dmitry)
|
||||
. Fixed bug #54423 (classes from dl()'ed extensions are not destroyed).
|
||||
(Tony, Dmitry)
|
||||
. Fixed bug #54372 (Crash accessing global object itself returned from its
|
||||
__get() handle). (Dmitry)
|
||||
. Fixed bug #54358 (Closure, use and reference). (Dmitry)
|
||||
. Fixed bug #54367 (Use of closure causes problem in ArrayAccess). (Dmitry)
|
||||
. Fixed bug #54039 (use() of static variables in lambda functions can break
|
||||
staticness). (Dmitry)
|
||||
. Fixed bug #54262 (Crash when assigning value to a dimension in a non-array).
|
||||
(Dmitry)
|
||||
|
||||
- Core:
|
||||
. Implemented FR #54459 (Range function accuracy). (Adam)
|
||||
. Added PHP_MANDIR constant telling where the manpages were installed into,
|
||||
and an --man-dir argument to php-config. (Hannes)
|
||||
|
||||
. Fixed a crash inside dtor for error handling. (Ilia)
|
||||
. Fixed bug #54939 (File path injection vulnerability in RFC1867 File upload
|
||||
filename). (Felipe) Reported by Krzysztof Kotowicz. (CVE-2011-2202)
|
||||
|
||||
. Fixed bug #54935 php_win_err can lead to crash. (Pierre)
|
||||
. Fixed bug #54924 (assert.* is not being reset upon request shutdown). (Ilia)
|
||||
. Fixed bug #54895 (Fix compiling with older gcc version without need for
|
||||
membar_producer macro). (mhei at heimpold dot de)
|
||||
. Fixed bug #54723 (getimagesize() doesn't check the full ico signature).
|
||||
(Scott)
|
||||
. Fixed bug #54580 (get_browser() segmentation fault when browscap ini
|
||||
directive is set through php_admin_value). (Gustavo)
|
||||
. Fixed bug #54238 (use-after-free in substr_replace()). (Stas)
|
||||
(CVE-2011-1148)
|
||||
. Fixed bug #54180 (parse_url() incorrectly parses path when ? in fragment).
|
||||
(tomas dot brastavicius at quantum dot lt, Pierrick)
|
||||
. Fixed bug #54137 (file_get_contents POST request sends additional line
|
||||
break). (maurice-php at mertinkat dot net, Ilia)
|
||||
. Fixed bug #54866 (incorrect accounting for realpath_cache_size).
|
||||
(Dustin Ward)
|
||||
. Fixed bug #54721 (Different Hashes on Windows, BSD and Linux on wrong Salt
|
||||
size). (Pierre, os at irj dot ru)
|
||||
. Fixed bug #53848 (fgetcsv() ignores spaces at beginnings of fields). (Ilia)
|
||||
. Alternative fix for bug #52550, as applied to the round() function (signed
|
||||
overflow), as the old fix impacted the algorithm for numbers with magnitude
|
||||
smaller than 0. (Gustavo)
|
||||
. Fixed bug #51997 (SEEK_CUR with 0 value, returns a warning). (Ilia)
|
||||
. Fixed bug #50363 (Invalid parsing in convert.quoted-printable-decode
|
||||
filter). (slusarz at curecanti dot org)
|
||||
. Fixed bug #48465 (sys_get_temp_dir() possibly inconsistent when using
|
||||
TMPDIR on Windows). (Pierre)
|
||||
|
||||
- Apache2 Handler SAPI:
|
||||
. Fixed bug #54529 (SAPI crashes on apache_config.c:197).
|
||||
(hebergement at riastudio dot fr)
|
||||
|
||||
- CLI SAPI:
|
||||
. Fixed bug #52496 (Zero exit code on option parsing failure). (Ilia)
|
||||
|
||||
- cURL:
|
||||
. Added ini option curl.cainfo (support for custom cert db). (Pierre)
|
||||
. Added CURLINFO_REDIRECT_URL support. (Daniel Stenberg, Pierre)
|
||||
. Added support for CURLOPT_MAX_RECV_SPEED_LARGE and
|
||||
CURLOPT_MAX_SEND_SPEED_LARGE. FR #51815. (Pierrick)
|
||||
|
||||
- DateTime extension:
|
||||
. Fixed bug #54340 (DateTime::add() method bug). (Adam)
|
||||
. Fixed bug #54316 (DateTime::createFromFormat does not handle trailing '|'
|
||||
correctly). (Adam)
|
||||
. Fixed bug #54283 (new DatePeriod(NULL) causes crash). (Felipe)
|
||||
. Fixed bug #51819 (Case discrepancy in timezone names cause Uncaught
|
||||
exception and fatal error). (Hannes)
|
||||
|
||||
- DBA extension:
|
||||
. Fixed bug #54242 (dba_insert returns true if key already exists). (Felipe)
|
||||
|
||||
- Exif extesion:
|
||||
. Fixed bug #54121 (error message format string typo). (Ilia)
|
||||
|
||||
- Fileinfo extension:
|
||||
. Fixed bug #54934 (Unresolved symbol strtoull in HP-UX 11.11). (Felipe)
|
||||
|
||||
- Filter extension:
|
||||
. Added 3rd parameter to filter_var_array() and filter_input_array()
|
||||
functions that allows disabling addition of empty elements. (Ilia)
|
||||
. Fixed bug #53037 (FILTER_FLAG_EMPTY_STRING_NULL is not implemented). (Ilia)
|
||||
|
||||
- Interbase extension:
|
||||
. Fixed bug #54269 (Short exception message buffer causes crash). (Felipe)
|
||||
|
||||
- intl extension:
|
||||
. Implemented FR #54540 (Allow loading of arbitrary resource bundles when
|
||||
fallback is disabled). (David Zuelke, Stas)
|
||||
. Implemented FR #54561 (Expose ICU version info). (David Zuelke, Ilia)
|
||||
|
||||
- json extension:
|
||||
. Fixed bug #54484 (Empty string in json_decode doesn't reset
|
||||
json_last_error()). (Ilia)
|
||||
|
||||
- LDAP extension:
|
||||
. Fixed bug #53339 (Fails to build when compilng with gcc 4.5 and DSO
|
||||
libraries). (Clint Byrum, Raphael)
|
||||
|
||||
- libxml extension:
|
||||
. Fixed bug #54601 (Removing the doctype node segfaults). (Hannes)
|
||||
. Fixed bug #54440 (libxml extension ignores default context). (Gustavo)
|
||||
|
||||
- mbstring extension:
|
||||
. Fixed bug #54494 (mb_substr() mishandles UTF-32LE and UCS-2LE). (Gustavo)
|
||||
|
||||
- MySQL Improved extension:
|
||||
. Fixed Bug #54221 (mysqli::get_warnings segfault when used in multi queries).
|
||||
(Andrey)
|
||||
|
||||
- mysqlnd
|
||||
. Fixed crash when using more than 28,000 bound parameters. Workaround is to
|
||||
set mysqlnd.net_cmd_buffer_size to at least 9000. (Andrey)
|
||||
. Fixed bug #54674 mysqlnd valid_sjis_(head|tail) is using invalid operator
|
||||
and range). (nihen at megabbs dot com, Andrey)
|
||||
|
||||
- OpenSSL extension
|
||||
. Fixed bug #54992 (Stream not closed and error not returned when SSL
|
||||
CN_match fails). (Gustavo, laird_ngrps at dodo dot com dot au)
|
||||
|
||||
- Oracle Database extension (OCI8):
|
||||
. Added oci_client_version() returning the runtime Oracle client library
|
||||
version (Chris Jones)
|
||||
|
||||
- PDO extension:
|
||||
. Fixed bug #54929 (Parse error with single quote in sql comment). (Felipe)
|
||||
. Fixed bug #52104 (bindColumn creates Warning regardless of ATTR_ERRMODE
|
||||
settings). (Ilia)
|
||||
|
||||
- PDO DBlib driver:
|
||||
. Fixed bug #54167 (PDO_DBLIB returns null on SQLUNIQUE field).
|
||||
(mjh at hodginsmedia dot com, Felipe)
|
||||
|
||||
- PDO MySQL driver:
|
||||
. Fixed bug #54644 (wrong pathes in php_pdo_mysql_int.h). (Tony, Johannes)
|
||||
. Fixed bug #53782 (foreach throws irrelevant exception). (Johannes, Andrey)
|
||||
. Implemented FR #48587 (MySQL PDO driver doesn't support SSL connections).
|
||||
(Rob)
|
||||
|
||||
- PDO PostgreSQL driver:
|
||||
. Fixed bug #54318 (Non-portable grep option used in PDO pgsql
|
||||
configuration). (bwalton at artsci dot utoronto dot ca)
|
||||
|
||||
- PDO Oracle driver:
|
||||
. Fixed bug #44989 (64bit Oracle RPMs still not supported by pdo-oci).
|
||||
(jbnance at tresgeek dot net)
|
||||
|
||||
- Phar extension:
|
||||
. Fixed bug #54395 (Phar::mount() crashes when calling with wrong parameters).
|
||||
(Felipe)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Added xml format to the status page. (fat)
|
||||
. Removed timestamp in logs written by children processes. (fat)
|
||||
. Fixed exit at FPM startup on fpm_resources_prepare() errors. (fat)
|
||||
. Added master rlimit_files and rlimit_core in the global configuration
|
||||
settings. (fat)
|
||||
. Removed pid in debug logs written by chrildren processes. (fat)
|
||||
. Added custom access log (also added per request %CPU and memory
|
||||
mesurement). (fat)
|
||||
. Added a real scoreboard and several improvements to the status page. (fat)
|
||||
|
||||
- Reflection extension:
|
||||
. Fixed bug #54347 (reflection_extension does not lowercase module function
|
||||
name). (Felipe, laruence at yahoo dot com dot cn)
|
||||
|
||||
- SOAP extension:
|
||||
. Fixed bug #54312 (soap_version logic bug). (tom at samplonius dot org)
|
||||
|
||||
- Sockets extension:
|
||||
. Fixed stack buffer overflow in socket_connect(). (CVE-2011-1938)
|
||||
Found by Mateusz Kocielski, Marek Kroemeke and Filip Palian. (Felipe)
|
||||
. Changed socket_set_block() and socket_set_nonblock() so they emit warnings
|
||||
on error. (Gustavo)
|
||||
. Fixed bug #51958 (socket_accept() fails on IPv6 server sockets). (Gustavo)
|
||||
|
||||
- SPL extension:
|
||||
. Fixed bug #54970 (SplFixedArray::setSize() isn't resizing). (Felipe)
|
||||
. Fixed bug #54609 (Certain implementation(s) of SplFixedArray cause hard
|
||||
crash). (Felipe)
|
||||
. Fixed bug #54384 (Dual iterators, GlobIterator, SplFileObject and
|
||||
SplTempFileObject crash when user-space classes don't call the paren
|
||||
constructor). (Gustavo)
|
||||
. Fixed bug #54292 (Wrong parameter causes crash in
|
||||
SplFileObject::__construct()). (Felipe)
|
||||
. Fixed bug #54291 (Crash iterating DirectoryIterator for dir name starting
|
||||
with \0). (Gustavo)
|
||||
. Fixed bug #54281 (Crash in non-initialized RecursiveIteratorIterator).
|
||||
(Felipe)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #54946 (stream_get_contents infinite loop). (Hannes)
|
||||
. Fixed bug #54623 (Segfault when writing to a persistent socket after
|
||||
closing a copy of the socket). (Gustavo)
|
||||
|
||||
. Zip extension:
|
||||
. Fixed bug #54681 (addGlob() crashes on invalid flags). (Felipe)
|
||||
|
||||
17 Mar 2011, PHP 5.3.6
|
||||
- Upgraded bundled Sqlite3 to version 3.7.4. (Ilia)
|
||||
- Upgraded bundled PCRE to version 8.11. (Ilia)
|
||||
|
||||
- Zend Engine:
|
||||
. Indirect reference to $this fails to resolve if direct $this is never used
|
||||
in method. (Scott)
|
||||
. Added options to debug backtrace functions. (Stas)
|
||||
. Fixed bug numerous crashes due to setlocale (crash on error, pcre, mysql
|
||||
etc.) on Windows in thread safe mode. (Pierre)
|
||||
. Fixed Bug #53971 (isset() and empty() produce apparently spurious runtime
|
||||
error). (Dmitry)
|
||||
. Fixed Bug #53958 (Closures can't 'use' shared variables by value and by
|
||||
reference). (Dmitry)
|
||||
. Fixed Bug #53629 (memory leak inside highlight_string()). (Hannes, Ilia)
|
||||
. Fixed Bug #51458 (Lack of error context with nested exceptions). (Stas)
|
||||
. Fixed Bug #47143 (Throwing an exception in a destructor causes a fatal
|
||||
error). (Stas)
|
||||
. Fixed bug #43512 (same parameter name can be used multiple times in
|
||||
method/function definition). (Felipe)
|
||||
|
||||
- Core:
|
||||
. Added ability to connect to HTTPS sites through proxy with basic
|
||||
authentication using stream_context/http/header/Proxy-Authorization (Dmitry)
|
||||
. Changed default value of ini directive serialize_precision from 100 to 17.
|
||||
(Gustavo)
|
||||
. Fixed bug #54055 (buffer overrun with high values for precision ini
|
||||
setting). (Gustavo)
|
||||
. Fixed bug #53959 (reflection data for fgetcsv out-of-date). (Richard)
|
||||
. Fixed bug #53577 (Regression introduced in 5.3.4 in open_basedir with a
|
||||
trailing forward slash). (lekensteyn at gmail dot com, Pierre)
|
||||
. Fixed bug #53682 (Fix compile on the VAX). (Rasmus, jklos)
|
||||
. Fixed bug #48484 (array_product() always returns 0 for an empty array).
|
||||
(Ilia)
|
||||
. Fixed bug #48607 (fwrite() doesn't check reply from ftp server before
|
||||
exiting). (Ilia)
|
||||
|
||||
|
||||
- Calendar extension:
|
||||
. Fixed bug #53574 (Integer overflow in SdnToJulian, sometimes leading to
|
||||
segfault). (Gustavo)
|
||||
|
||||
- DOM extension:
|
||||
. Implemented FR #39771 (Made DOMDocument::saveHTML accept an optional DOMNode
|
||||
like DOMDocument::saveXML). (Gustavo)
|
||||
|
||||
- DateTime extension:
|
||||
. Fixed a bug in DateTime->modify() where absolute date/time statements had
|
||||
no effect. (Derick)
|
||||
. Fixed bug #53729 (DatePeriod fails to initialize recurrences on 64bit
|
||||
big-endian systems). (Derick, rein@basefarm.no)
|
||||
. Fixed bug #52808 (Segfault when specifying interval as two dates). (Stas)
|
||||
. Fixed bug #52738 (Can't use new properties in class extended from
|
||||
DateInterval). (Stas)
|
||||
. Fixed bug #52290 (setDate, setISODate, setTime works wrong when DateTime
|
||||
created from timestamp). (Stas)
|
||||
. Fixed bug #52063 (DateTime constructor's second argument doesn't have a
|
||||
null default value). (Gustavo, Stas)
|
||||
|
||||
- Exif extension:
|
||||
. Fixed bug #54002 (crash on crafted tag, reported by Luca Carettoni).
|
||||
(Pierre) (CVE-2011-0708)
|
||||
|
||||
- Filter extension:
|
||||
. Fixed bug #53924 (FILTER_VALIDATE_URL doesn't validate port number).
|
||||
(Ilia, Gustavo)
|
||||
. Fixed bug #53150 (FILTER_FLAG_NO_RES_RANGE is missing some IP ranges).
|
||||
(Ilia)
|
||||
. Fixed bug #52209 (INPUT_ENV returns NULL for set variables (CLI)). (Ilia)
|
||||
. Fixed bug #47435 (FILTER_FLAG_NO_RES_RANGE don't work with ipv6).
|
||||
(Ilia, valli at icsurselva dot ch)
|
||||
|
||||
- Fileinfo extension:
|
||||
. Fixed bug #54016 (finfo_file() Cannot determine filetype in archives).
|
||||
(Hannes)
|
||||
|
||||
- Gettext
|
||||
. Fixed bug #53837 (_() crashes on Windows when no LANG or LANGUAGE
|
||||
environment variable are set). (Pierre)
|
||||
|
||||
- IMAP extension:
|
||||
. Implemented FR #53812 (get MIME headers of the part of the email). (Stas)
|
||||
. Fixed bug #53377 (imap_mime_header_decode() doesn't ignore \t during long
|
||||
MIME header unfolding). (Adam)
|
||||
|
||||
- Intl extension:
|
||||
. Fixed bug #53612 (Segmentation fault when using cloned several intl
|
||||
objects). (Gustavo)
|
||||
. Fixed bug #53512 (NumberFormatter::setSymbol crash on bogus $attr values).
|
||||
(Felipe)
|
||||
. Implemented clone functionality for number, date & message formatters.
|
||||
(Stas).
|
||||
|
||||
- JSON extension:
|
||||
. Fixed bug #53963 (Ensure error_code is always set during some failed
|
||||
decodings). (Scott)
|
||||
|
||||
- mysqlnd
|
||||
. Fixed problem with always returning 0 as num_rows for unbuffered sets.
|
||||
(Andrey, Ulf)
|
||||
|
||||
- MySQL Improved extension:
|
||||
. Added 'db' and 'catalog' keys to the field fetching functions (FR #39847).
|
||||
(Kalle)
|
||||
. Fixed buggy counting of affected rows when using the text protocol. The
|
||||
collected statistics were wrong when multi_query was used with mysqlnd
|
||||
(Andrey)
|
||||
. Fixed bug #53795 (Connect Error from MySqli (mysqlnd) when using SSL).
|
||||
(Kalle)
|
||||
. Fixed bug #53503 (mysqli::query returns false after successful LOAD DATA
|
||||
query). (Kalle, Andrey)
|
||||
. Fixed bug #53425 (mysqli_real_connect() ignores client flags when built to
|
||||
call libmysql). (Kalle, tre-php-net at crushedhat dot com)
|
||||
|
||||
- OpenSSL extension:
|
||||
. Fixed stream_socket_enable_crypto() not honoring the socket timeout in
|
||||
server mode. (Gustavo)
|
||||
. Fixed bug #54060 (Memory leaks when openssl_encrypt). (Pierre)
|
||||
. Fixed bug #54061 (Memory leaks when openssl_decrypt). (Pierre)
|
||||
. Fixed bug #53592 (stream_socket_enable_crypto() busy-waits in client mode).
|
||||
(Gustavo)
|
||||
. Implemented FR #53447 (Cannot disable SessionTicket extension for servers
|
||||
that do not support it) by adding a no_ticket SSL context option. (Adam,
|
||||
Tony)
|
||||
|
||||
- PDO MySQL driver:
|
||||
. Fixed bug #53551 (PDOStatement execute segfaults for pdo_mysql driver).
|
||||
(Johannes)
|
||||
. Implemented FR #47802 (Support for setting character sets in DSN strings).
|
||||
(Kalle)
|
||||
|
||||
- PDO Oracle driver:
|
||||
. Fixed bug #39199 (Cannot load Lob data with more than 4000 bytes on
|
||||
ORACLE 10). (spatar at mail dot nnov dot ru)
|
||||
|
||||
- PDO PostgreSQL driver:
|
||||
. Fixed bug #53517 (segfault in pgsql_stmt_execute() when postgres is down).
|
||||
(gyp at balabit dot hu)
|
||||
|
||||
- Phar extension:
|
||||
. Fixed bug #54247 (format-string vulnerability on Phar). (Felipe)
|
||||
(CVE-2011-1153)
|
||||
. Fixed bug #53541 (format string bug in ext/phar).
|
||||
(crrodriguez at opensuse dot org, Ilia)
|
||||
. Fixed bug #53898 (PHAR reports invalid error message, when the directory
|
||||
does not exist). (Ilia)
|
||||
|
||||
- PHP-FPM SAPI:
|
||||
. Enforce security in the fastcgi protocol parsing.
|
||||
(ef-lists at email dotde)
|
||||
. Fixed bug #53777 (php-fpm log format now match php_error log format). (fat)
|
||||
. Fixed bug #53527 (php-fpm --test doesn't set a valuable return value). (fat)
|
||||
. Fixed bug #53434 (php-fpm slowlog now also logs the original request). (fat)
|
||||
|
||||
- Readline extension:
|
||||
. Fixed bug #53630 (Fixed parameter handling inside readline() function).
|
||||
(jo at feuersee dot de, Ilia)
|
||||
|
||||
- Reflection extension:
|
||||
. Fixed bug #53915 (ReflectionClass::getConstant(s) emits fatal error on
|
||||
constants with self::). (Gustavo)
|
||||
|
||||
- Shmop extension:
|
||||
. Fixed bug #54193 (Integer overflow in shmop_read()). (Felipe)
|
||||
Reported by Jose Carlos Norte <jose at eyeos dot org> (CVE-2011-1092)
|
||||
|
||||
- SNMP extension:
|
||||
. Fixed bug #51336 (snmprealwalk (snmp v1) does not handle end of OID tree
|
||||
correctly). (Boris Lytochkin)
|
||||
|
||||
- SOAP extension:
|
||||
. Fixed possible crash introduced by the NULL poisoning patch.
|
||||
(Mateusz Kocielski, Pierre)
|
||||
|
||||
- SPL extension:
|
||||
. Fixed memory leak in DirectoryIterator::getExtension() and
|
||||
SplFileInfo::getExtension(). (Felipe)
|
||||
. Fixed bug #53914 (SPL assumes HAVE_GLOB is defined). (Chris Jones)
|
||||
. Fixed bug #53515 (property_exists incorrect on ArrayObject null and 0
|
||||
values). (Felipe)
|
||||
. Fixed bug #49608 (Using CachingIterator on DirectoryIterator instance
|
||||
segfaults). (Felipe)
|
||||
|
||||
. Added SplFileInfo::getExtension(). FR #48767. (Peter Cowburn)
|
||||
|
||||
- SQLite3 extension:
|
||||
. Fixed memory leaked introduced by the NULL poisoning patch.
|
||||
(Mateusz Kocielski, Pierre)
|
||||
. Fixed memory leak on SQLite3Result and SQLite3Stmt when assigning to a
|
||||
reference. (Felipe)
|
||||
. Add SQlite3_Stmt::readonly() for checking if a statement is read only.
|
||||
(Scott)
|
||||
. Implemented FR #53466 (SQLite3Result::columnType() should return false after
|
||||
all of the rows have been fetched). (Scott)
|
||||
|
||||
- Streams:
|
||||
. Fixed bug #54092 (Segmentation fault when using HTTP proxy with the FTP
|
||||
wrapper). (Gustavo)
|
||||
. Fixed bug #53913 (Streams functions assume HAVE_GLOB is defined). (Chris
|
||||
Jones)
|
||||
. Fixed bug #53903 (userspace stream stat callback does not separate the
|
||||
elements of the returned array before converting them). (Gustavo)
|
||||
. Implemented FR #26158 (open arbitrary file descriptor with fopen). (Gustavo)
|
||||
|
||||
- Tokenizer Extension
|
||||
. Fixed bug #54089 (token_get_all() does not stop after __halt_compiler).
|
||||
(Ilia)
|
||||
|
||||
- XSL extension:
|
||||
. Fixed memory leaked introduced by the NULL poisoning patch.
|
||||
(Mateusz Kocielski, Pierre)
|
||||
|
||||
- Zip extension:
|
||||
. Added the filename into the return value of stream_get_meta_data(). (Hannes)
|
||||
. Fixed bug #53923 (Zip functions assume HAVE_GLOB is defined). (Adam)
|
||||
. Fixed bug #53893 (Wrong return value for ZipArchive::extractTo()). (Pierre)
|
||||
. Fixed bug #53885 (ZipArchive segfault with FL_UNCHANGED on empty archive).
|
||||
(Stas, Maksymilian Arciemowicz). (CVE-2011-0421)
|
||||
. Fixed bug #53854 (Missing constants for compression type). (Richard, Adam)
|
||||
. Fixed bug #53603 (ZipArchive should quiet stat errors). (brad dot froehle at
|
||||
gmail dot com, Gustavo)
|
||||
. Fixed bug #53579 (stream_get_contents() segfaults on ziparchive streams).
|
||||
(Hannes)
|
||||
. Fixed bug #53568 (swapped memset arguments in struct initialization).
|
||||
(crrodriguez at opensuse dot org)
|
||||
. Fixed bug #53166 (Missing parameters in docs and reflection definition).
|
||||
(Richard)
|
||||
. Fixed bug #49072 (feof never returns true for damaged file in zip).
|
||||
(Gustavo, Richard Quadling)
|
||||
|
||||
06 Jan 2011, PHP 5.3.5
|
||||
- Fixed Bug #53632 (infinite loop with x87 fpu). (CVE-2010-4645) (Scott,
|
||||
Rasmus)
|
||||
|
||||
09 Dec 2010, PHP 5.3.4
|
||||
- Upgraded bundled Sqlite3 to version 3.7.3. (Ilia)
|
||||
- Upgraded bundled PCRE to version 8.10. (Ilia)
|
||||
@@ -552,8 +7,7 @@ PHP NEWS
|
||||
- Security enhancements:
|
||||
. Fixed crash in zip extract method (possible CWE-170).
|
||||
(Maksymilian Arciemowicz, Pierre)
|
||||
. Paths with NULL in them (foo\0bar.txt) are now considered as invalid.
|
||||
(Rasmus)
|
||||
. Paths with NULL in them (foo\0bar.txt) are now considered as invalid. (Rasmus)
|
||||
. Fixed a possible double free in imap extension (Identified by Mateusz
|
||||
Kocielski). (CVE-2010-4150). (Ilia)
|
||||
. Fixed NULL pointer dereference in ZipArchive::getArchiveComment.
|
||||
@@ -580,8 +34,8 @@ PHP NEWS
|
||||
. Implemented symbolic links support for open_basedir checks. (Pierre)
|
||||
. Implemented FR #51804, SplFileInfo::getLinkTarget on Windows. (Pierre)
|
||||
. Implemented FR #50692, not uploaded files don't count towards
|
||||
max_file_uploads limit. As a side improvement, temporary files are not
|
||||
opened for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
|
||||
max_file_uploads limit. As a side improvement, temporary files are not opened
|
||||
for empty uploads and, in debug mode, 0-length uploads. (Gustavo)
|
||||
|
||||
- Improved MySQLnd:
|
||||
. Added new character sets to mysqlnd, which are available in MySQL 5.5
|
||||
@@ -618,12 +72,12 @@ PHP NEWS
|
||||
. Fixed bug #53141 (autoload misbehaves if called from closing session).
|
||||
(ladislav at marek dot su)
|
||||
. Fixed bug #53021 (In html_entity_decode, failure to convert numeric entities
|
||||
with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of
|
||||
ENT_NOQUOTES in html_entity_decode that had introduced the bug (rev
|
||||
#185591) to other encodings. Additionaly, html_entity_decode() now doesn't
|
||||
decode " if ENT_NOQUOTES is given. (Gustavo)
|
||||
. Fixed bug #52931 (strripos not overloaded with function overloading
|
||||
enabled). (Felipe)
|
||||
with ENT_NOQUOTES and ISO-8859-1). Fixed and extended the fix of ENT_NOQUOTES
|
||||
in html_entity_decode that had introduced the bug (rev #185591) to other
|
||||
encodings. Additionaly, html_entity_decode() now doesn't decode " if
|
||||
ENT_NOQUOTES is given. (Gustavo)
|
||||
. Fixed bug #52931 (strripos not overloaded with function overloading enabled).
|
||||
(Felipe)
|
||||
. Fixed bug #52772 (var_dump() doesn't check for the existence of
|
||||
get_class_name before calling it). (Kalle, Gustavo)
|
||||
. Fixed bug #52534 (var_export array with negative key). (Felipe)
|
||||
@@ -637,8 +91,7 @@ PHP NEWS
|
||||
other platforms). (Pierre)
|
||||
. Fixed bug #49687 (utf8_decode vulnerabilities and deficiencies in the number
|
||||
of reported malformed sequences). (CVE-2010-3870) (Gustavo)
|
||||
. Fixed bug #49407 (get_html_translation_table doesn't handle UTF-8).
|
||||
(Gustavo)
|
||||
. Fixed bug #49407 (get_html_translation_table doesn't handle UTF-8). (Gustavo)
|
||||
. Fixed bug #48831 (php -i has different output to php --ini). (Richard,
|
||||
Pierre)
|
||||
. Fixed bug #47643 (array_diff() takes over 3000 times longer than php 5.2.4).
|
||||
@@ -739,8 +192,8 @@ PHP NEWS
|
||||
words). (Ilia)
|
||||
|
||||
- Intl extension:
|
||||
. Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409).
|
||||
(Stas, Maksymilian Arciemowicz)
|
||||
. Fixed crashes on invalid parameters in intl extension. (CVE-2010-4409). (Stas, Maksymilian
|
||||
Arciemowicz)
|
||||
. Added support for formatting the timestamp stored in a DateTime object.
|
||||
(Stas)
|
||||
. Fixed bug #50590 (IntlDateFormatter::parse result is limited to the integer
|
||||
@@ -750,8 +203,8 @@ PHP NEWS
|
||||
. Fixed bug #53273 (mb_strcut() returns garbage with the excessive length
|
||||
parameter). (CVE-2010-4156) (Mateusz Kocielski, Pierre, Moriyoshi)
|
||||
. Fixed bug #52981 (Unicode casing table was out-of-date. Updated with
|
||||
UnicodeData-6.0.0d7.txt and included the source of the generator program
|
||||
with the distribution) (Gustavo).
|
||||
UnicodeData-6.0.0d7.txt and included the source of the generator program with
|
||||
the distribution) (Gustavo).
|
||||
. Fixed bug #52681 (mb_send_mail() appends an extra MIME-Version header).
|
||||
(Adam)
|
||||
|
||||
@@ -822,8 +275,8 @@ PHP NEWS
|
||||
. Fixed bug #52725 (gcc builtin atomic functions were sometimes used when they
|
||||
were not available). (fat)
|
||||
. Fixed bug #52693 (configuration file errors are not logged to stderr). (fat)
|
||||
. Fixed bug #52674 (FPM Status page returns inconsistent Content-Type
|
||||
headers). (fat)
|
||||
. Fixed bug #52674 (FPM Status page returns inconsistent Content-Type headers).
|
||||
(fat)
|
||||
. Fixed bug #52498 (libevent was not only linked to php-fpm). (fat)
|
||||
|
||||
- PDO:
|
||||
@@ -881,9 +334,9 @@ PHP NEWS
|
||||
- Streams:
|
||||
. Fixed forward stream seeking emulation in streams that don't support seeking
|
||||
in situations where the read operation gives back less data than requested
|
||||
and when there was data in the buffer before the emulation started. Also
|
||||
made more consistent its behavior -- should return failure every time less
|
||||
data than was requested was skipped. (Gustavo)
|
||||
and when there was data in the buffer before the emulation started. Also made
|
||||
more consistent its behavior -- should return failure every time less data
|
||||
than was requested was skipped. (Gustavo)
|
||||
. Fixed bug #53241 (stream casting that relies on fdopen/fopencookie fails
|
||||
with streams opened with, inter alia, the 'xb' mode). (Gustavo)
|
||||
. Fixed bug #53006 (stream_get_contents has an unpredictable behavior when the
|
||||
|
||||
+7
-20
@@ -51,40 +51,27 @@ SUCH DAMAGE.
|
||||
|
||||
6. ext/standard crypt's blowfish implementation
|
||||
|
||||
The crypt_blowfish homepage is:
|
||||
|
||||
http://www.openwall.com/crypt/
|
||||
|
||||
This code comes from John the Ripper password cracker, with reentrant
|
||||
and crypt(3) interfaces added, but optimizations specific to password
|
||||
cracking removed.
|
||||
|
||||
Written by Solar Designer <solar at openwall.com> in 1998-2011.
|
||||
No copyright is claimed, and the software is hereby placed in the public
|
||||
domain. In case this attempt to disclaim copyright and place the software
|
||||
in the public domain is deemed null and void, then the software is
|
||||
Copyright (c) 1998-2011 Solar Designer and it is hereby released to the
|
||||
general public under the following terms:
|
||||
Written by Solar Designer <solar at openwall.com> in 1998-2002 and
|
||||
placed in the public domain.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted.
|
||||
|
||||
There's ABSOLUTELY NO WARRANTY, express or implied.
|
||||
There's absolutely no warranty.
|
||||
|
||||
It is my intent that you should be able to use this on your system,
|
||||
as part of a software package, or anywhere else to improve security,
|
||||
as a part of a software package, or anywhere else to improve security,
|
||||
ensure compatibility, or for any other purpose. I would appreciate
|
||||
it if you give credit where it is due and keep your modifications in
|
||||
the public domain as well, but I don't require that in order to let
|
||||
you place this code and any modifications you make under a license
|
||||
of your choice.
|
||||
|
||||
This implementation is mostly compatible with OpenBSD's bcrypt.c (prefix
|
||||
"$2a$") by Niels Provos <provos at citi.umich.edu>, and uses some of his
|
||||
This implementation is compatible with OpenBSD bcrypt.c (version 2a)
|
||||
by Niels Provos <provos at citi.umich.edu>, and uses some of his
|
||||
ideas. The password hashing algorithm was designed by David Mazieres
|
||||
<dm at lcs.mit.edu>. For more information on the level of compatibility,
|
||||
please refer to the comments in BF_set_key() and to the crypt(3) man page
|
||||
included in the crypt_blowfish tarball.
|
||||
<dm at lcs.mit.edu>.
|
||||
|
||||
There's a paper on the algorithm that explains its design decisions:
|
||||
|
||||
|
||||
+14
-10
@@ -100,14 +100,16 @@ Derick) run the following commands for you:
|
||||
|
||||
``sudo -u ezmlm ezmlm-sub ~ezmlm/primary-qa-tester/mod moderator-email-address``
|
||||
|
||||
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.
|
||||
3. Update the MD5 sums in ``web/qa/trunk/include/rc-md5sums.txt`` (no empty lines).
|
||||
|
||||
Example: When rolling an RC, set the 'rc' with appropriate information for the
|
||||
given version.
|
||||
4. Update in ``web/qa/trunk/include/release-qa.php`` constants with the new RC and
|
||||
commit this.
|
||||
|
||||
Note: Remember to update the MD5 checksum information.
|
||||
a. ``$BUILD_TEST_RELEASES`` = array("4.4.7RC1", "5.2.2RC1")
|
||||
|
||||
b. ``$CURRENT_QA_RELEASE_4`` = "4.4.7RC1" (``$CURRENT_QA_RELEASE_5`` for PHP5)
|
||||
|
||||
c. ``$RELEASE_PROCESS`` = array(4 => true, 5 => true)
|
||||
|
||||
1. Update in ``php-bugs/trunk/include/functions.inc`` the ``show_version_option``
|
||||
function to include the new RC and commit.
|
||||
@@ -242,11 +244,13 @@ number, and remove the RC from there.
|
||||
|
||||
11. Update ``qaweb/include/release-qa.php``
|
||||
|
||||
- Update $QA_RELEASES with the appropriate information, which means bumping
|
||||
the version number to an upcoming version.
|
||||
a. Update the $BUILD_TEST_RELEASES array with the release name
|
||||
|
||||
Example: If PHP 5.3.7 is being released, then PHP 5.3.8 is the next QA version,
|
||||
so replace 5.3.7 with 5.3.8 within $QA_RELEASES.
|
||||
b. Update $RELEASE_PROCESS array (set to false)
|
||||
|
||||
I. For PHP4: Set $CURRENT_QA_RELEASE_4 to false
|
||||
|
||||
II. For PHP5: Set $CURRENT_QA_RELEASE_5 to false
|
||||
|
||||
Re-releasing the same version (or -pl)
|
||||
--------------------------------------
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Thread Safe Resource Manager |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| Copyright (c) 1999-2010, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| This source file is subject to the TSRM license, that is bundled |
|
||||
| with this package in the file LICENSE |
|
||||
+----------------------------------------------------------------------+
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Thread Safe Resource Manager |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1999-2011, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| Copyright (c) 1999-2010, Andi Gutmans, Sascha Schumann, Zeev Suraski |
|
||||
| This source file is subject to the TSRM license, that is bundled |
|
||||
| with this package in the file LICENSE |
|
||||
+----------------------------------------------------------------------+
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 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-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 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 |
|
||||
|
||||
+6
-48
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 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 |
|
||||
@@ -509,9 +509,6 @@ CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC) /* {{{ */
|
||||
|
||||
*length = 1;
|
||||
retval = (char *) malloc(2);
|
||||
if (retval == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
retval[0] = DEFAULT_SLASH;
|
||||
retval[1] = '\0';
|
||||
return retval;
|
||||
@@ -524,9 +521,6 @@ CWD_API char *virtual_getcwd_ex(size_t *length TSRMLS_DC) /* {{{ */
|
||||
|
||||
*length = state->cwd_length+1;
|
||||
retval = (char *) malloc(*length+1);
|
||||
if (retval == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
memcpy(retval, state->cwd, *length);
|
||||
retval[0] = toupper(retval[0]);
|
||||
retval[*length-1] = DEFAULT_SLASH;
|
||||
@@ -629,14 +623,7 @@ CWD_API void realpath_cache_del(const char *path, int path_len TSRMLS_DC) /* {{{
|
||||
memcmp(path, (*bucket)->path, path_len) == 0) {
|
||||
realpath_cache_bucket *r = *bucket;
|
||||
*bucket = (*bucket)->next;
|
||||
|
||||
/* if the pointers match then only subtract the length of the path */
|
||||
if(r->path == r->realpath) {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1;
|
||||
} else {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
}
|
||||
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
free(r);
|
||||
return;
|
||||
} else {
|
||||
@@ -661,10 +648,6 @@ static inline void realpath_cache_add(const char *path, int path_len, const char
|
||||
realpath_cache_bucket *bucket = malloc(size);
|
||||
unsigned long n;
|
||||
|
||||
if (bucket == NULL) {
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
bucket->key = realpath_cache_key(path, path_len TSRMLS_CC);
|
||||
#else
|
||||
@@ -711,14 +694,7 @@ static inline realpath_cache_bucket* realpath_cache_find(const char *path, int p
|
||||
if (CWDG(realpath_cache_ttl) && (*bucket)->expires < t) {
|
||||
realpath_cache_bucket *r = *bucket;
|
||||
*bucket = (*bucket)->next;
|
||||
|
||||
/* if the pointers match then only subtract the length of the path */
|
||||
if(r->path == r->realpath) {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1;
|
||||
} else {
|
||||
CWDG(realpath_cache_size) -= sizeof(realpath_cache_bucket) + r->path_len + 1 + r->realpath_len + 1;
|
||||
}
|
||||
|
||||
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) {
|
||||
@@ -890,9 +866,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
}
|
||||
|
||||
pbuffer = (REPARSE_DATA_BUFFER *)tsrm_do_alloca(MAXIMUM_REPARSE_DATA_BUFFER_SIZE, use_heap_large);
|
||||
if (pbuffer == NULL) {
|
||||
return -1;
|
||||
}
|
||||
if(!DeviceIoControl(hLink, FSCTL_GET_REPARSE_POINT, NULL, 0, pbuffer, MAXIMUM_REPARSE_DATA_BUFFER_SIZE, &retlength, NULL)) {
|
||||
tsrm_free_alloca(pbuffer, use_heap_large);
|
||||
CloseHandle(hLink);
|
||||
@@ -979,9 +952,9 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
}
|
||||
|
||||
if (!isVolume) {
|
||||
char * tmp2 = substitutename + substitutename_off;
|
||||
char * tmp = substitutename + substitutename_off;
|
||||
for(bufindex = 0; bufindex < (substitutename_len - substitutename_off); bufindex++) {
|
||||
*(path + bufindex) = *(tmp2 + bufindex);
|
||||
*(path + bufindex) = *(tmp + bufindex);
|
||||
}
|
||||
|
||||
*(path + bufindex) = 0;
|
||||
@@ -1093,7 +1066,6 @@ static int tsrm_realpath_r(char *path, int start, int len, int *ll, time_t *t, i
|
||||
}
|
||||
if (is_dir && !directory) {
|
||||
/* not a directory */
|
||||
tsrm_free_alloca(tmp, use_heap);
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
@@ -1398,10 +1370,6 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
/* realpath("") returns CWD */
|
||||
if (!*path) {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
retval = NULL;
|
||||
goto end;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
|
||||
@@ -1411,10 +1379,6 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
CWD_STATE_COPY(&new_state, &CWDG(cwd));
|
||||
} else {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
retval = NULL;
|
||||
goto end;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
@@ -1430,7 +1394,7 @@ CWD_API char *virtual_realpath(const char *path, char *real_path TSRMLS_DC) /* {
|
||||
}
|
||||
|
||||
CWD_STATE_FREE(&new_state);
|
||||
end:
|
||||
|
||||
return retval;
|
||||
}
|
||||
/* }}} */
|
||||
@@ -1923,9 +1887,6 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
|
||||
/* realpath("") returns CWD */
|
||||
if (!*path) {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
if (VCWD_GETCWD(cwd, MAXPATHLEN)) {
|
||||
@@ -1937,9 +1898,6 @@ CWD_API char *tsrm_realpath(const char *path, char *real_path TSRMLS_DC) /* {{{
|
||||
new_state.cwd_length = strlen(cwd);
|
||||
} else {
|
||||
new_state.cwd = (char*)malloc(1);
|
||||
if (new_state.cwd == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
new_state.cwd[0] = '\0';
|
||||
new_state.cwd_length = 0;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 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
-5
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 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 |
|
||||
@@ -532,10 +532,6 @@ TSRM_API FILE *popen_ex(const char *command, const char *type, const char *cwd,
|
||||
}
|
||||
|
||||
cmd = (char*)malloc(strlen(command)+strlen(TWG(comspec))+sizeof(" /c ")+2);
|
||||
if (!cmd) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
sprintf(cmd, "%s /c \"%s\"", TWG(comspec), command);
|
||||
if (asuser) {
|
||||
res = CreateProcessAsUser(token_user, NULL, cmd, &security, &security, security.bInheritHandle, dwCreateFlags, env, cwd, &startup, &process);
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| PHP Version 5 |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1997-2011 The PHP Group |
|
||||
| Copyright (c) 1997-2010 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 |
|
||||
|
||||
@@ -670,9 +670,7 @@ UPGRADE NOTES - PHP 5.3
|
||||
ReflectionClass::inNamespace()
|
||||
ReflectionClass::getNamespaceName()
|
||||
ReflectionClass::getShortName()
|
||||
- SPL: DirectoryIterator::getExtension()
|
||||
SplFileInfo::getExtension()
|
||||
SplObjectStorage::addAll()
|
||||
- SPL SplObjectStorage::addAll()
|
||||
SplObjectStorage::removeAll()
|
||||
- XSL: XSLTProcessor::setProfiling()
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -4,7 +4,7 @@ dnl This file contains local autoconf functions.
|
||||
|
||||
AC_DEFUN([LIBZEND_BISON_CHECK],[
|
||||
# we only support certain bison versions
|
||||
bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3 2.5"
|
||||
bison_version_list="1.28 1.35 1.75 1.875 2.0 2.1 2.2 2.3 2.4 2.4.1 2.4.2 2.4.3"
|
||||
|
||||
# for standalone build of Zend Engine
|
||||
test -z "$SED" && SED=sed
|
||||
|
||||
@@ -20,5 +20,5 @@ var_dump( ArrayProperty::$array );
|
||||
--EXPECT--
|
||||
array(1) {
|
||||
[1]=>
|
||||
int(42)
|
||||
int(23)
|
||||
}
|
||||
@@ -1,48 +0,0 @@
|
||||
--TEST--
|
||||
Bug #50816 (Using class constants in array definition fails)
|
||||
--FILE--
|
||||
<?php
|
||||
define("ONE", 1);
|
||||
define("TWO", 1);
|
||||
|
||||
class Foo {
|
||||
const ONE = 1;
|
||||
const TWO = 1;
|
||||
|
||||
public static $mapWithConst = array(self::ONE => 'one', self::TWO => 'two',);
|
||||
|
||||
public static $mapWithConst1 = array(1 => 'one', self::TWO => 'two',);
|
||||
public static $mapWithConst2 = array(self::ONE => 'one', 1 => 'two',);
|
||||
|
||||
public static $mapWithoutConst = array(1 => 'one', 1 => 'two',);
|
||||
}
|
||||
|
||||
$mapWithConst = array(1 => 'one', 1 => 'two',);
|
||||
|
||||
$mapWithoutConst = array(Foo::ONE => 'one', Foo::TWO => 'two',);
|
||||
$mapWithoutConst0 = array(1 => 'one', 1 => 'two',);
|
||||
$mapWithoutConst1 = array(ONE => 'one', 1 => 'two',);
|
||||
$mapWithoutConst2 = array(1 => 'one', TWO => 'two',);
|
||||
$mapWithoutConst3 = array(ONE => 'one', TWO => 'two',);
|
||||
|
||||
var_dump(Foo::$mapWithConst[1]);
|
||||
var_dump(Foo::$mapWithConst1[1]);
|
||||
var_dump(Foo::$mapWithConst2[1]);
|
||||
var_dump(Foo::$mapWithoutConst[1]);
|
||||
var_dump($mapWithConst[1]);
|
||||
var_dump($mapWithoutConst[1]);
|
||||
var_dump($mapWithoutConst0[1]);
|
||||
var_dump($mapWithoutConst1[1]);
|
||||
var_dump($mapWithoutConst2[1]);
|
||||
var_dump($mapWithoutConst3[1]);
|
||||
--EXPECT--
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
string(3) "two"
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53629 (memory leak inside highlight_string())
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
$str = '
|
||||
<?php
|
||||
class foo {
|
||||
public $bar = <<<EOT
|
||||
bar
|
||||
EOT;
|
||||
}
|
||||
?>
|
||||
';
|
||||
$str2 = '
|
||||
<?php
|
||||
var_dump(array(<<<EOD
|
||||
foobar!
|
||||
EOD
|
||||
));
|
||||
?>
|
||||
';
|
||||
|
||||
highlight_string($str, true);
|
||||
highlight_string($str2, true);
|
||||
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
Done
|
||||
@@ -1,10 +0,0 @@
|
||||
--TEST--
|
||||
zend_strtod() hangs with 2.2250738585072011e-308
|
||||
--FILE--
|
||||
<?php
|
||||
$d = 2.2250738585072011e-308;
|
||||
|
||||
echo "Done\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Done
|
||||
@@ -1,22 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53727 (Inconsistent behavior of is_subclass_of with interfaces)
|
||||
--FILE--
|
||||
<?php
|
||||
interface MyInterface {
|
||||
const TEST_CONSTANT = true;
|
||||
}
|
||||
|
||||
class ParentClass implements MyInterface { }
|
||||
|
||||
class ChildClass extends ParentClass { }
|
||||
|
||||
echo (is_subclass_of('ChildClass', 'MyInterface') ? 'true' : 'false') . "\n";
|
||||
echo (defined('ChildClass::TEST_CONSTANT') ? 'true' : 'false') . "\n";
|
||||
|
||||
echo (is_subclass_of('ParentClass', 'MyInterface') ? 'true' : 'false') . "\n";
|
||||
echo (defined('ParentClass::TEST_CONSTANT') ? 'true' : 'false') . "\n";
|
||||
--EXPECT--
|
||||
true
|
||||
true
|
||||
true
|
||||
true
|
||||
@@ -1,61 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53958 (Closures can't 'use' shared variables by value and by reference)
|
||||
--FILE--
|
||||
<?php
|
||||
// TEST 1
|
||||
$a = 1;
|
||||
$fn1 = function() use ($a) {echo "$a\n"; $a++;};
|
||||
$fn2 = function() use ($a) {echo "$a\n"; $a++;};
|
||||
$a = 5;
|
||||
$fn1(); // 1
|
||||
$fn2(); // 1
|
||||
$fn1(); // 1
|
||||
$fn2(); // 1
|
||||
|
||||
// TEST 2
|
||||
$b = 1;
|
||||
$fn1 = function() use (&$b) {echo "$b\n"; $b++;};
|
||||
$fn2 = function() use (&$b) {echo "$b\n"; $b++;};
|
||||
$b = 5;
|
||||
$fn1(); // 5
|
||||
$fn2(); // 6
|
||||
$fn1(); // 7
|
||||
$fn2(); // 8
|
||||
|
||||
// TEST 3
|
||||
$c = 1;
|
||||
$fn1 = function() use (&$c) {echo "$c\n"; $c++;};
|
||||
$fn2 = function() use ($c) {echo "$c\n"; $c++;};
|
||||
$c = 5;
|
||||
$fn1(); // 5
|
||||
$fn2(); // 1
|
||||
$fn1(); // 6
|
||||
$fn2(); // 1
|
||||
|
||||
// TEST 4
|
||||
$d = 1;
|
||||
$fn1 = function() use ($d) {echo "$d\n"; $d++;};
|
||||
$fn2 = function() use (&$d) {echo "$d\n"; $d++;};
|
||||
$d = 5;
|
||||
$fn1(); // 1
|
||||
$fn2(); // 5
|
||||
$fn1(); // 1
|
||||
$fn2(); // 6
|
||||
?>
|
||||
--EXPECT--
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
5
|
||||
6
|
||||
7
|
||||
8
|
||||
5
|
||||
1
|
||||
6
|
||||
1
|
||||
1
|
||||
5
|
||||
1
|
||||
6
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #53971 (isset() and empty() produce apparently spurious runtime error)
|
||||
--FILE--
|
||||
<?php
|
||||
$s = "";
|
||||
var_dump(isset($s[0][0]));
|
||||
?>
|
||||
--EXPECT--
|
||||
bool(false)
|
||||
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54013 (ReflectionParam for duplicate parameter contains garbage)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
class a
|
||||
{
|
||||
function b($aaaaaaaa, $aaaaaaaa)
|
||||
{
|
||||
$params = func_get_args();
|
||||
}
|
||||
}
|
||||
|
||||
$c = new a;
|
||||
$c->b('waa?', 'meukee!');
|
||||
|
||||
$reflectionClass = new ReflectionClass($c);
|
||||
$params = $reflectionClass->getMethod('b')->getParameters();
|
||||
|
||||
var_dump($params[0], $params[1]);
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(ReflectionParameter)#%d (1) {
|
||||
["name"]=>
|
||||
string(8) "aaaaaaaa"
|
||||
}
|
||||
object(ReflectionParameter)#%d (1) {
|
||||
["name"]=>
|
||||
string(8) "aaaaaaaa"
|
||||
}
|
||||
@@ -1,58 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54039 (use() of static variables in lambda functions can break staticness)
|
||||
--FILE--
|
||||
<?php
|
||||
function test_1() {
|
||||
static $v = 0;
|
||||
++$v;
|
||||
echo "Outer function increments \$v to $v\n";
|
||||
$f = function() use($v) {
|
||||
echo "Inner function reckons \$v is $v\n";
|
||||
};
|
||||
return $f;
|
||||
}
|
||||
|
||||
$f = test_1(); $f();
|
||||
$f = test_1(); $f();
|
||||
|
||||
function test_2() {
|
||||
static $v = 0;
|
||||
$f = function() use($v) {
|
||||
echo "Inner function reckons \$v is $v\n";
|
||||
};
|
||||
++$v;
|
||||
echo "Outer function increments \$v to $v\n";
|
||||
return $f;
|
||||
}
|
||||
|
||||
$f = test_2(); $f();
|
||||
$f = test_2(); $f();
|
||||
|
||||
function test_3() {
|
||||
static $v = "";
|
||||
$v .= 'b';
|
||||
echo "Outer function catenates 'b' onto \$v to give $v\n";
|
||||
$f = function() use($v) {
|
||||
echo "Inner function reckons \$v is $v\n";
|
||||
};
|
||||
$v .= 'a';
|
||||
echo "Outer function catenates 'a' onto \$v to give $v\n";
|
||||
return $f;
|
||||
}
|
||||
$f = test_3(); $f();
|
||||
$f = test_3(); $f();
|
||||
--EXPECT--
|
||||
Outer function increments $v to 1
|
||||
Inner function reckons $v is 1
|
||||
Outer function increments $v to 2
|
||||
Inner function reckons $v is 2
|
||||
Outer function increments $v to 1
|
||||
Inner function reckons $v is 0
|
||||
Outer function increments $v to 2
|
||||
Inner function reckons $v is 1
|
||||
Outer function catenates 'b' onto $v to give b
|
||||
Outer function catenates 'a' onto $v to give ba
|
||||
Inner function reckons $v is b
|
||||
Outer function catenates 'b' onto $v to give bab
|
||||
Outer function catenates 'a' onto $v to give baba
|
||||
Inner function reckons $v is bab
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54262 (Crash when assigning value to a dimension in a non-array)
|
||||
--FILE--
|
||||
<?php
|
||||
$a = '0';
|
||||
var_dump(isset($a['b']));
|
||||
$simpleString = preg_match('//', '', $a->a);
|
||||
$simpleString["wrong"] = "f";
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(true)
|
||||
|
||||
Warning: Attempt to modify property of non-object in %s/Zend/tests/bug54262.php on line 4
|
||||
|
||||
Warning: Cannot use a scalar value as an array in %s/Zend/tests/bug54262.php on line 5
|
||||
ok
|
||||
@@ -1,17 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54265 (crash when variable gets reassigned in error handler)
|
||||
--FILE--
|
||||
<?php
|
||||
function my_errorhandler($errno,$errormsg) {
|
||||
global $my_var;
|
||||
$my_var = 0;
|
||||
echo "EROOR: $errormsg\n";
|
||||
}
|
||||
set_error_handler("my_errorhandler");
|
||||
$my_var = str_repeat("A",$my_var[0]->errormsg = "xyz");
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECT--
|
||||
EROOR: Creating default object from empty value
|
||||
ok
|
||||
|
||||
@@ -1,35 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54268 (Double free when destroy_zend_class fails)
|
||||
--INI--
|
||||
memory_limit=8M
|
||||
--SKIPIF--
|
||||
<?php
|
||||
$zend_mm_enabled = getenv("USE_ZEND_ALLOC");
|
||||
if ($zend_mm_enabled === "0") {
|
||||
die("skip Zend MM disabled");
|
||||
}
|
||||
?>
|
||||
--FILE--
|
||||
<?php
|
||||
class DestructableObject
|
||||
{
|
||||
public function __destruct()
|
||||
{
|
||||
DestructableObject::__destruct();
|
||||
}
|
||||
}
|
||||
class DestructorCreator
|
||||
{
|
||||
public function __destruct()
|
||||
{
|
||||
$this->test = new DestructableObject;
|
||||
}
|
||||
}
|
||||
class Test
|
||||
{
|
||||
public static $mystatic;
|
||||
}
|
||||
$x = new Test();
|
||||
Test::$mystatic = new DestructorCreator();
|
||||
--EXPECTF--
|
||||
Fatal error: Allowed memory size of %s bytes exhausted%s(tried to allocate %s bytes) in %s on line %d
|
||||
@@ -1,22 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54305 (Crash in gc_remove_zval_from_buffer)
|
||||
--FILE--
|
||||
<?php
|
||||
class TestClass {
|
||||
public function methodWithArgs($a, $b) {
|
||||
}
|
||||
}
|
||||
abstract class AbstractClass {
|
||||
}
|
||||
$methodWithArgs = new ReflectionMethod('TestClass', 'methodWithArgs');
|
||||
echo $methodWithArgs++;
|
||||
?>
|
||||
--EXPECTF--
|
||||
Method [ <user> public method methodWithArgs ] {
|
||||
@@ %sbug54305.php %d - %d
|
||||
|
||||
- Parameters [2] {
|
||||
Parameter #0 [ <required> $a ]
|
||||
Parameter #1 [ <required> $b ]
|
||||
}
|
||||
}
|
||||
@@ -1,39 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54358 (Closure, use and reference)
|
||||
--FILE--
|
||||
<?php
|
||||
class asserter {
|
||||
public function call($function) {
|
||||
}
|
||||
}
|
||||
|
||||
$asserter = new asserter();
|
||||
|
||||
$closure = function() use ($asserter, &$function) {
|
||||
$asserter->call($function = 'md5');
|
||||
};
|
||||
|
||||
$closure();
|
||||
|
||||
var_dump($function);
|
||||
|
||||
$closure = function() use ($asserter, $function) {
|
||||
$asserter->call($function);
|
||||
};
|
||||
|
||||
$closure();
|
||||
|
||||
var_dump($function);
|
||||
|
||||
$closure = function() use ($asserter, $function) {
|
||||
$asserter->call($function);
|
||||
};
|
||||
|
||||
$closure();
|
||||
|
||||
var_dump($function);
|
||||
?>
|
||||
--EXPECT--
|
||||
string(3) "md5"
|
||||
string(3) "md5"
|
||||
string(3) "md5"
|
||||
@@ -1,24 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54367 (Use of closure causes problem in ArrayAccess)
|
||||
--FILE--
|
||||
<?php
|
||||
class MyObjet implements ArrayAccess
|
||||
{
|
||||
public function offsetSet($offset, $value) { }
|
||||
public function offsetExists($offset) { }
|
||||
public function offsetUnset($offset) { }
|
||||
|
||||
public function offsetGet ($offset)
|
||||
{
|
||||
return function ($var) use ($offset) { // here is the problem
|
||||
var_dump($offset, $var);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
$a = new MyObjet();
|
||||
echo $a['p']('foo');
|
||||
?>
|
||||
--EXPECT--
|
||||
string(1) "p"
|
||||
string(3) "foo"
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54372 (Crash accessing global object itself returned from its __get() handle)
|
||||
--FILE--
|
||||
<?php
|
||||
class test_class
|
||||
{
|
||||
public function __get($name)
|
||||
{
|
||||
return $this;
|
||||
}
|
||||
|
||||
public function b()
|
||||
{
|
||||
echo "ok\n";
|
||||
}
|
||||
}
|
||||
|
||||
global $test3;
|
||||
$test3 = new test_class();
|
||||
$test3->a->b();
|
||||
?>
|
||||
--EXPECT--
|
||||
ok
|
||||
@@ -1,15 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54585 (track_errors causes segfault)
|
||||
--INI--
|
||||
track_errors=On
|
||||
--FILE--
|
||||
<?php
|
||||
function testing($source) {
|
||||
unset($source[$cos]);
|
||||
}
|
||||
testing($_GET);
|
||||
echo "ok\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
Notice: Undefined variable: cos in %sbug54585.php on line 3
|
||||
ok
|
||||
@@ -1,26 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54624 (class_alias and type hint)
|
||||
--FILE--
|
||||
<?php
|
||||
class A
|
||||
{
|
||||
function foo(A $param) {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class_alias('A', 'AliasA');
|
||||
|
||||
eval('
|
||||
class B extends A
|
||||
{
|
||||
function foo(AliasA $param) {
|
||||
}
|
||||
|
||||
}
|
||||
');
|
||||
|
||||
echo "DONE\n";
|
||||
?>
|
||||
--EXPECTF--
|
||||
DONE
|
||||
@@ -1,3 +0,0 @@
|
||||
<?php
|
||||
namespace b\c {}
|
||||
namespace b\d {}
|
||||
@@ -1,11 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54804 (__halt_compiler and imported namespaces)
|
||||
--FILE--
|
||||
<?php
|
||||
namespace a;
|
||||
require __DIR__ . '/bug54804.inc';
|
||||
echo 'DONE';
|
||||
__halt_compiler();
|
||||
?>
|
||||
--EXPECT--
|
||||
DONE
|
||||
@@ -1,28 +0,0 @@
|
||||
--TEST--
|
||||
Bug #54910 (Crash when calling call_user_func with unknown function name)
|
||||
--FILE--
|
||||
<?php
|
||||
class A {
|
||||
public function __call($method, $args) {
|
||||
if (stripos($method, 'get') === 0) {
|
||||
return $this->get();
|
||||
}
|
||||
die("No such method - '$method'\n");
|
||||
}
|
||||
|
||||
protected function get() {
|
||||
$class = get_class($this);
|
||||
$call = array($class, 'noSuchMethod');
|
||||
|
||||
if (is_callable($call)) {
|
||||
call_user_func($call);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class B extends A {}
|
||||
|
||||
$input = new B();
|
||||
echo $input->getEmail();
|
||||
--EXPECT--
|
||||
No such method - 'noSuchMethod'
|
||||
@@ -1,23 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55007 (compiler fail after previous fail)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function __autoload($classname) {
|
||||
if ('CompileErrorClass'==$classname) eval('class CompileErrorClass { function foo() { $a[] } }');
|
||||
if ('MyErrorHandler'==$classname) eval('class MyErrorHandler { function __construct() { print "My error handler runs.\n"; } }');
|
||||
}
|
||||
|
||||
function shutdown() {
|
||||
new MyErrorHandler();
|
||||
}
|
||||
|
||||
|
||||
register_shutdown_function('shutdown');
|
||||
|
||||
new CompileErrorClass();
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
Fatal error: Cannot use [] for reading in %s(%d) : eval()'d code on line %d
|
||||
My error handler runs.
|
||||
@@ -1,30 +0,0 @@
|
||||
--TEST--
|
||||
Bug #55156 (ReflectionClass::getDocComment() returns comment even though the class has none)
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
/** test */
|
||||
namespace foo {
|
||||
function test() { }
|
||||
|
||||
$x = new \ReflectionFunction('foo\test');
|
||||
var_dump($x->getDocComment());
|
||||
|
||||
/** test1 */
|
||||
class bar { }
|
||||
|
||||
/** test2 */
|
||||
class foo extends namespace\bar { }
|
||||
|
||||
$x = new \ReflectionClass('foo\bar');
|
||||
var_dump($x->getDocComment());
|
||||
|
||||
$x = new \ReflectionClass('foo\foo');
|
||||
var_dump($x->getDocComment());
|
||||
}
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
bool(false)
|
||||
string(12) "/** test1 */"
|
||||
string(12) "/** test2 */"
|
||||
@@ -1,31 +0,0 @@
|
||||
--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,5 +1,5 @@
|
||||
--TEST--
|
||||
concat different types
|
||||
concat difffent types
|
||||
--INI--
|
||||
precision=14
|
||||
--FILE--
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
--TEST--
|
||||
Persistent case insensitive and user defined constants
|
||||
Persistent case insensetive and user defined constants
|
||||
--FILE--
|
||||
<?php
|
||||
var_dump(ZEND_THREAD_safe);
|
||||
|
||||
@@ -1,397 +0,0 @@
|
||||
--TEST--
|
||||
debug_backtrace options
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
function backtrace_print($opt = null)
|
||||
{
|
||||
if(is_null($opt)) {
|
||||
print_r(debug_backtrace());
|
||||
} else {
|
||||
print_r(debug_backtrace($opt));
|
||||
}
|
||||
}
|
||||
|
||||
function doit($a, $b, $how)
|
||||
{
|
||||
echo "==default\n";
|
||||
$how();
|
||||
echo "==true\n";
|
||||
$how(true);
|
||||
echo "==false\n";
|
||||
$how(false);
|
||||
echo "==DEBUG_BACKTRACE_PROVIDE_OBJECT\n";
|
||||
$how(DEBUG_BACKTRACE_PROVIDE_OBJECT);
|
||||
echo "==DEBUG_BACKTRACE_IGNORE_ARGS\n";
|
||||
$how(DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||
echo "==both\n";
|
||||
$how(DEBUG_BACKTRACE_PROVIDE_OBJECT|DEBUG_BACKTRACE_IGNORE_ARGS);
|
||||
}
|
||||
|
||||
class foo {
|
||||
protected function doCall($dowhat, $how)
|
||||
{
|
||||
$dowhat('a','b', $how);
|
||||
}
|
||||
static function statCall($dowhat, $how)
|
||||
{
|
||||
$obj = new self();
|
||||
$obj->doCall($dowhat, $how);
|
||||
}
|
||||
}
|
||||
foo::statCall("doit", "debug_print_backtrace");
|
||||
foo::statCall("doit", "backtrace_print");
|
||||
|
||||
?>
|
||||
--EXPECTF--
|
||||
==default
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==true
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==false
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==DEBUG_BACKTRACE_PROVIDE_OBJECT
|
||||
#0 doit(a, b, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall(doit, debug_print_backtrace) called at [%sdebug_backtrace_options.php:%d]
|
||||
==DEBUG_BACKTRACE_IGNORE_ARGS
|
||||
#0 doit() called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
==both
|
||||
#0 doit() called at [%sdebug_backtrace_options.php:%d]
|
||||
#1 foo->doCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
#2 foo::statCall() called at [%sdebug_backtrace_options.php:%d]
|
||||
==default
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==true
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 17
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
[0] => 1
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==false
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 19
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
[0] =>
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==DEBUG_BACKTRACE_PROVIDE_OBJECT
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 21
|
||||
[function] => backtrace_print
|
||||
[args] => Array
|
||||
(
|
||||
[0] => 1
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
[args] => Array
|
||||
(
|
||||
[0] => a
|
||||
[1] => b
|
||||
[2] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
[args] => Array
|
||||
(
|
||||
[0] => doit
|
||||
[1] => backtrace_print
|
||||
)
|
||||
|
||||
)
|
||||
|
||||
)
|
||||
==DEBUG_BACKTRACE_IGNORE_ARGS
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 23
|
||||
[function] => backtrace_print
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[type] => ->
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
)
|
||||
|
||||
)
|
||||
==both
|
||||
Array
|
||||
(
|
||||
[0] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => 25
|
||||
[function] => backtrace_print
|
||||
)
|
||||
|
||||
[1] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doit
|
||||
)
|
||||
|
||||
[2] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => doCall
|
||||
[class] => foo
|
||||
[object] => foo Object
|
||||
(
|
||||
)
|
||||
|
||||
[type] => ->
|
||||
)
|
||||
|
||||
[3] => Array
|
||||
(
|
||||
[file] => %sdebug_backtrace_options.php
|
||||
[line] => %d
|
||||
[function] => statCall
|
||||
[class] => foo
|
||||
[type] => ::
|
||||
)
|
||||
|
||||
)
|
||||
@@ -20,8 +20,4 @@ echo "Done\n";
|
||||
--EXPECTF--
|
||||
string(12) "test thrown!"
|
||||
|
||||
Fatal error: Uncaught exception 'Exception' in %sexception_handler_002.php:7
|
||||
Stack trace:
|
||||
#0 [internal function]: foo(Object(test))
|
||||
#1 {main}
|
||||
thrown in %sexception_handler_002.php on line %d
|
||||
Fatal error: Exception thrown without a stack frame in Unknown on line 0
|
||||
@@ -1,9 +0,0 @@
|
||||
--TEST--
|
||||
Argument parsing error #001
|
||||
--FILE--
|
||||
<?php
|
||||
function foo($arg1 string) {}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Parse error: syntax error, unexpected T_STRING, expecting ')' in %sfunction_arguments_001.php on line %d
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
--TEST--
|
||||
Argument parsing error #002
|
||||
--FILE--
|
||||
<?php
|
||||
function foo($arg1/) {}
|
||||
?>
|
||||
--EXPECTF--
|
||||
Parse error: syntax error, unexpected '/', expecting ')' in %sfunction_arguments_002.php on line %d
|
||||
|
||||
@@ -1,13 +0,0 @@
|
||||
--TEST--
|
||||
Indirect referenced $this
|
||||
--FILE--
|
||||
<?php
|
||||
class X {
|
||||
function f($x){var_dump($$x);}
|
||||
}
|
||||
$x = new X;
|
||||
$x->f("this");
|
||||
?>
|
||||
--EXPECTF--
|
||||
object(X)#%d (0) {
|
||||
}
|
||||
@@ -38,6 +38,6 @@ bool(true)
|
||||
bool(false)
|
||||
bool(false)
|
||||
bool(true)
|
||||
bool(true)
|
||||
bool(false)
|
||||
AUTOLOAD 'X1'
|
||||
bool(false)
|
||||
+5
-47
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -114,7 +114,7 @@ ZEND_API zval zval_used_for_init; /* True global variable */
|
||||
/* version information */
|
||||
static char *zend_version_info;
|
||||
static uint zend_version_info_length;
|
||||
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2011 Zend Technologies\n"
|
||||
#define ZEND_CORE_VERSION_INFO "Zend Engine v" ZEND_VERSION ", Copyright (c) 1998-2010 Zend Technologies\n"
|
||||
#define PRINT_ZVAL_INDENT 4
|
||||
|
||||
static void print_hash(zend_write_func_t write_func, HashTable *ht, int indent, zend_bool is_object TSRMLS_DC) /* {{{ */
|
||||
@@ -808,7 +808,6 @@ ZEND_API void _zend_bailout(char *filename, uint lineno) /* {{{ */
|
||||
exit(-1);
|
||||
}
|
||||
CG(unclean_shutdown) = 1;
|
||||
CG(active_class_entry) = NULL;
|
||||
CG(in_compilation) = EG(in_execution) = 0;
|
||||
EG(current_execute_data) = NULL;
|
||||
LONGJMP(*EG(bailout), FAILURE);
|
||||
@@ -821,7 +820,7 @@ void zend_append_version_info(const zend_extension *extension) /* {{{ */
|
||||
char *new_info;
|
||||
uint new_info_length;
|
||||
|
||||
new_info_length = sizeof(" with v, , by \n")
|
||||
new_info_length = sizeof(" with v, by \n")
|
||||
+ strlen(extension->name)
|
||||
+ strlen(extension->version)
|
||||
+ strlen(extension->copyright)
|
||||
@@ -829,10 +828,10 @@ void zend_append_version_info(const zend_extension *extension) /* {{{ */
|
||||
|
||||
new_info = (char *) malloc(new_info_length + 1);
|
||||
|
||||
snprintf(new_info, new_info_length, " with %s v%s, %s, by %s\n", extension->name, extension->version, extension->copyright, extension->author);
|
||||
sprintf(new_info, " with %s v%s, %s, by %s\n", extension->name, extension->version, extension->copyright, extension->author);
|
||||
|
||||
zend_version_info = (char *) realloc(zend_version_info, zend_version_info_length+new_info_length + 1);
|
||||
strncat(zend_version_info, new_info, new_info_length);
|
||||
strcat(zend_version_info, new_info);
|
||||
zend_version_info_length += new_info_length;
|
||||
free(new_info);
|
||||
}
|
||||
@@ -958,23 +957,6 @@ ZEND_API int zend_get_configuration_directive(const char *name, uint name_length
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
#define SAVE_STACK(stack) do { \
|
||||
if (CG(stack).top) { \
|
||||
memcpy(&stack, &CG(stack), sizeof(zend_stack)); \
|
||||
CG(stack).top = CG(stack).max = 0; \
|
||||
CG(stack).elements = NULL; \
|
||||
} else { \
|
||||
stack.top = 0; \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
#define RESTORE_STACK(stack) do { \
|
||||
if (stack.top) { \
|
||||
zend_stack_destroy(&CG(stack)); \
|
||||
memcpy(&CG(stack), &stack, sizeof(zend_stack)); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */
|
||||
{
|
||||
va_list args;
|
||||
@@ -987,14 +969,6 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */
|
||||
zval *orig_user_error_handler;
|
||||
zend_bool in_compilation;
|
||||
zend_class_entry *saved_class_entry;
|
||||
zend_stack bp_stack;
|
||||
zend_stack function_call_stack;
|
||||
zend_stack switch_cond_stack;
|
||||
zend_stack foreach_copy_stack;
|
||||
zend_stack object_stack;
|
||||
zend_stack declare_stack;
|
||||
zend_stack list_stack;
|
||||
zend_stack labels_stack;
|
||||
TSRMLS_FETCH();
|
||||
|
||||
/* Obtain relevant filename and lineno */
|
||||
@@ -1122,14 +1096,6 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */
|
||||
if (in_compilation) {
|
||||
saved_class_entry = CG(active_class_entry);
|
||||
CG(active_class_entry) = NULL;
|
||||
SAVE_STACK(bp_stack);
|
||||
SAVE_STACK(function_call_stack);
|
||||
SAVE_STACK(switch_cond_stack);
|
||||
SAVE_STACK(foreach_copy_stack);
|
||||
SAVE_STACK(object_stack);
|
||||
SAVE_STACK(declare_stack);
|
||||
SAVE_STACK(list_stack);
|
||||
SAVE_STACK(labels_stack);
|
||||
}
|
||||
|
||||
if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC) == SUCCESS) {
|
||||
@@ -1146,14 +1112,6 @@ ZEND_API void zend_error(int type, const char *format, ...) /* {{{ */
|
||||
|
||||
if (in_compilation) {
|
||||
CG(active_class_entry) = saved_class_entry;
|
||||
RESTORE_STACK(bp_stack);
|
||||
RESTORE_STACK(function_call_stack);
|
||||
RESTORE_STACK(switch_cond_stack);
|
||||
RESTORE_STACK(foreach_copy_stack);
|
||||
RESTORE_STACK(object_stack);
|
||||
RESTORE_STACK(declare_stack);
|
||||
RESTORE_STACK(list_stack);
|
||||
RESTORE_STACK(labels_stack);
|
||||
}
|
||||
|
||||
if (!EG(user_error_handler)) {
|
||||
|
||||
+1
-4
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -771,9 +771,6 @@ ZEND_API void zend_save_error_handling(zend_error_handling *current TSRMLS_DC);
|
||||
ZEND_API void zend_replace_error_handling(zend_error_handling_t error_handling, zend_class_entry *exception_class, zend_error_handling *current TSRMLS_DC);
|
||||
ZEND_API void zend_restore_error_handling(zend_error_handling *saved TSRMLS_DC);
|
||||
|
||||
#define DEBUG_BACKTRACE_PROVIDE_OBJECT (1<<0)
|
||||
#define DEBUG_BACKTRACE_IGNORE_ARGS (1<<1)
|
||||
|
||||
#endif /* ZEND_H */
|
||||
|
||||
/*
|
||||
|
||||
+4
-27
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -928,7 +928,7 @@ ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args TSRMLS_DC,
|
||||
va_end(va);
|
||||
} else {
|
||||
p++;
|
||||
RETURN_IF_ZERO_ARGS(num_args, p, quiet);
|
||||
RETURN_IF_ZERO_ARGS(num_args-1, p, quiet);
|
||||
|
||||
va_start(va, type_spec);
|
||||
|
||||
@@ -941,7 +941,6 @@ ZEND_API int zend_parse_method_parameters_ex(int flags, int num_args TSRMLS_DC,
|
||||
zend_error(E_CORE_ERROR, "%s::%s() must be derived from %s::%s",
|
||||
ce->name, get_active_function_name(TSRMLS_C), Z_OBJCE_P(this_ptr)->name, get_active_function_name(TSRMLS_C));
|
||||
}
|
||||
va_end(va);
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
@@ -2083,22 +2082,6 @@ ZEND_API int zend_get_module_started(const char *module_name) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static int clean_module_class(const zend_class_entry **ce, int *module_number TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
if ((*ce)->type == ZEND_INTERNAL_CLASS && (*ce)->module->module_number == *module_number) {
|
||||
return ZEND_HASH_APPLY_REMOVE;
|
||||
} else {
|
||||
return ZEND_HASH_APPLY_KEEP;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static void clean_module_classes(int module_number TSRMLS_DC) /* {{{ */
|
||||
{
|
||||
zend_hash_apply_with_argument(EG(class_table), (apply_func_arg_t) clean_module_class, (void *) &module_number TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
void module_destructor(zend_module_entry *module) /* {{{ */
|
||||
{
|
||||
TSRMLS_FETCH();
|
||||
@@ -2106,7 +2089,6 @@ void module_destructor(zend_module_entry *module) /* {{{ */
|
||||
if (module->type == MODULE_TEMPORARY) {
|
||||
zend_clean_module_rsrc_dtors(module->module_number TSRMLS_CC);
|
||||
clean_module_constants(module->module_number TSRMLS_CC);
|
||||
clean_module_classes(module->module_number TSRMLS_CC);
|
||||
}
|
||||
|
||||
if (module->module_started && module->module_shutdown_func) {
|
||||
@@ -2308,7 +2290,7 @@ ZEND_API ZEND_FUNCTION(display_disabled_function)
|
||||
|
||||
static zend_function_entry disabled_function[] = {
|
||||
ZEND_FE(display_disabled_function, NULL)
|
||||
ZEND_FE_END
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
ZEND_API int zend_disable_function(char *function_name, uint function_name_length TSRMLS_DC) /* {{{ */
|
||||
@@ -2334,7 +2316,7 @@ static zend_object_value display_disabled_class(zend_class_entry *class_type TSR
|
||||
/* }}} */
|
||||
|
||||
static const zend_function_entry disabled_class_new[] = {
|
||||
ZEND_FE_END
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
ZEND_API int zend_disable_class(char *class_name, uint class_name_length TSRMLS_DC) /* {{{ */
|
||||
@@ -2591,11 +2573,6 @@ get_function_via_handler:
|
||||
if (fcc->function_handler) {
|
||||
retval = 1;
|
||||
call_via_handler = (fcc->function_handler->common.fn_flags & ZEND_ACC_CALL_VIA_HANDLER) != 0;
|
||||
if (call_via_handler && !fcc->object_ptr && EG(This) &&
|
||||
Z_OBJ_HT_P(EG(This))->get_class_entry &&
|
||||
instanceof_function(Z_OBJCE_P(EG(This)), fcc->calling_scope TSRMLS_CC)) {
|
||||
fcc->object_ptr = EG(This);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -96,8 +96,6 @@ typedef struct _zend_fcall_info_cache {
|
||||
#define ZEND_NS_FALIAS(ns, name, alias, arg_info) ZEND_NS_FENTRY(ns, name, ZEND_FN(alias), arg_info, 0)
|
||||
#define ZEND_NS_DEP_FALIAS(ns, name, alias, arg_info) ZEND_NS_FENTRY(ns, name, ZEND_FN(alias), arg_info, ZEND_ACC_DEPRECATED)
|
||||
|
||||
#define ZEND_FE_END { NULL, NULL, NULL, 0, 0 }
|
||||
|
||||
#define ZEND_ARG_INFO(pass_by_ref, name) { #name, sizeof(#name)-1, NULL, 0, 0, 0, pass_by_ref, 0, 0 },
|
||||
#define ZEND_ARG_PASS_INFO(pass_by_ref) { NULL, 0, NULL, 0, 0, 0, pass_by_ref, 0, 0 },
|
||||
#define ZEND_ARG_OBJ_INFO(pass_by_ref, name, classname, allow_null) { #name, sizeof(#name)-1, #classname, sizeof(#classname)-1, 0, allow_null, pass_by_ref, 0, 0 },
|
||||
|
||||
+2
-12
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -241,10 +241,6 @@ static zend_mm_storage* zend_mm_mem_win32_init(void *params)
|
||||
return NULL;
|
||||
}
|
||||
storage = (zend_mm_storage*)malloc(sizeof(zend_mm_storage));
|
||||
if (storage == NULL) {
|
||||
HeapDestroy(heap);
|
||||
return NULL;
|
||||
}
|
||||
storage->data = (void*) heap;
|
||||
return storage;
|
||||
}
|
||||
@@ -1070,13 +1066,7 @@ ZEND_API zend_mm_heap *zend_mm_startup_ex(const zend_mm_mem_handlers *handlers,
|
||||
storage->handlers = handlers;
|
||||
|
||||
heap = malloc(sizeof(struct _zend_mm_heap));
|
||||
if (heap == NULL) {
|
||||
fprintf(stderr, "Cannot allocate heap for zend_mm storage [%s]\n", handlers->name);
|
||||
#ifdef PHP_WIN32
|
||||
fflush(stderr);
|
||||
#endif
|
||||
exit(255);
|
||||
}
|
||||
|
||||
heap->storage = storage;
|
||||
heap->block_size = block_size;
|
||||
heap->compact_size = 0;
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -211,7 +211,7 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_get_defined_constants, 0, 0, 0)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_debug_backtrace, 0, 0, 0)
|
||||
ZEND_ARG_INFO(0, options)
|
||||
ZEND_ARG_INFO(0, provide_object)
|
||||
ZEND_END_ARG_INFO()
|
||||
|
||||
ZEND_BEGIN_ARG_INFO_EX(arginfo_extension_loaded, 0, 0, 1)
|
||||
@@ -272,7 +272,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
|
||||
ZEND_FE(get_extension_funcs, arginfo_extension_loaded)
|
||||
ZEND_FE(get_defined_constants, arginfo_get_defined_constants)
|
||||
ZEND_FE(debug_backtrace, arginfo_debug_backtrace)
|
||||
ZEND_FE(debug_print_backtrace, arginfo_debug_backtrace)
|
||||
ZEND_FE(debug_print_backtrace, arginfo_zend__void)
|
||||
#if ZEND_DEBUG
|
||||
ZEND_FE(zend_test_func, NULL)
|
||||
#ifdef ZTS
|
||||
@@ -283,7 +283,7 @@ static const zend_function_entry builtin_functions[] = { /* {{{ */
|
||||
ZEND_FE(gc_enabled, arginfo_zend__void)
|
||||
ZEND_FE(gc_enable, arginfo_zend__void)
|
||||
ZEND_FE(gc_disable, arginfo_zend__void)
|
||||
ZEND_FE_END
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
@@ -822,25 +822,45 @@ static void is_a_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool only_subclass)
|
||||
return;
|
||||
}
|
||||
|
||||
if (Z_TYPE_P(obj) == IS_STRING) {
|
||||
if (only_subclass && Z_TYPE_P(obj) == IS_STRING) {
|
||||
zend_class_entry **the_ce;
|
||||
if (zend_lookup_class(Z_STRVAL_P(obj), Z_STRLEN_P(obj), &the_ce TSRMLS_CC) == FAILURE) {
|
||||
zend_error(E_WARNING, "Unknown class passed as parameter");
|
||||
RETURN_FALSE;
|
||||
}
|
||||
instance_ce = *the_ce;
|
||||
} else if (Z_TYPE_P(obj) == IS_OBJECT && HAS_CLASS_ENTRY(*obj)) {
|
||||
instance_ce = Z_OBJCE_P(obj);
|
||||
} else if (Z_TYPE_P(obj) != IS_OBJECT) {
|
||||
RETURN_FALSE;
|
||||
} else {
|
||||
instance_ce = NULL;
|
||||
}
|
||||
|
||||
/* TBI!! new object handlers */
|
||||
if (Z_TYPE_P(obj) == IS_OBJECT && !HAS_CLASS_ENTRY(*obj)) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (zend_lookup_class_ex(class_name, class_name_len, 0, &ce TSRMLS_CC) == FAILURE) {
|
||||
retval = 0;
|
||||
} else {
|
||||
if (only_subclass && instance_ce == *ce) {
|
||||
retval = 0;
|
||||
if (only_subclass) {
|
||||
if (!instance_ce) {
|
||||
instance_ce = Z_OBJCE_P(obj)->parent;
|
||||
} else {
|
||||
instance_ce = instance_ce->parent;
|
||||
}
|
||||
} else {
|
||||
retval = instanceof_function(instance_ce, *ce TSRMLS_CC);
|
||||
instance_ce = Z_OBJCE_P(obj);
|
||||
}
|
||||
|
||||
if (!instance_ce) {
|
||||
RETURN_FALSE;
|
||||
}
|
||||
|
||||
if (instanceof_function(instance_ce, *ce TSRMLS_CC)) {
|
||||
retval = 1;
|
||||
} else {
|
||||
retval = 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1713,7 +1733,7 @@ ZEND_FUNCTION(create_function)
|
||||
function_name[0] = '\0';
|
||||
|
||||
do {
|
||||
function_name_length = 1 + snprintf(function_name + 1, sizeof("lambda_")+MAX_LENGTH_OF_LONG, "lambda_%d", ++EG(lambda_count));
|
||||
function_name_length = 1 + sprintf(function_name + 1, "lambda_%d", ++EG(lambda_count));
|
||||
} while (zend_hash_add(EG(function_table), function_name, function_name_length+1, &new_function, sizeof(zend_function), NULL)==FAILURE);
|
||||
zend_hash_del(EG(function_table), LAMBDA_TEMP_FUNCNAME, sizeof(LAMBDA_TEMP_FUNCNAME));
|
||||
RETURN_STRINGL(function_name, function_name_length, 0);
|
||||
@@ -1924,7 +1944,7 @@ void debug_print_backtrace_args(zval *arg_array TSRMLS_DC)
|
||||
}
|
||||
}
|
||||
|
||||
/* {{{ proto void debug_print_backtrace([int options]) */
|
||||
/* {{{ proto void debug_print_backtrace(void) */
|
||||
ZEND_FUNCTION(debug_print_backtrace)
|
||||
{
|
||||
zend_execute_data *ptr, *skip;
|
||||
@@ -1936,9 +1956,8 @@ ZEND_FUNCTION(debug_print_backtrace)
|
||||
char *include_filename = NULL;
|
||||
zval *arg_array = NULL;
|
||||
int indent = 0;
|
||||
long options = 0;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &options) == FAILURE) {
|
||||
if (zend_parse_parameters_none() == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1997,7 +2016,7 @@ ZEND_FUNCTION(debug_print_backtrace)
|
||||
call_type = NULL;
|
||||
}
|
||||
if ((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) {
|
||||
if (ptr->function_state.arguments && (options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0) {
|
||||
if (ptr->function_state.arguments) {
|
||||
arg_array = debug_backtrace_get_args(ptr->function_state.arguments TSRMLS_CC);
|
||||
}
|
||||
}
|
||||
@@ -2047,7 +2066,7 @@ ZEND_FUNCTION(debug_print_backtrace)
|
||||
ZEND_PUTS(class_name);
|
||||
ZEND_PUTS(call_type);
|
||||
}
|
||||
zend_printf("%s(", function_name);
|
||||
zend_printf("%s(", function_name?function_name:"main");
|
||||
if (arg_array) {
|
||||
debug_print_backtrace_args(arg_array TSRMLS_CC);
|
||||
zval_ptr_dtor(&arg_array);
|
||||
@@ -2084,7 +2103,7 @@ ZEND_FUNCTION(debug_print_backtrace)
|
||||
|
||||
/* }}} */
|
||||
|
||||
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options TSRMLS_DC)
|
||||
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int provide_object TSRMLS_DC)
|
||||
{
|
||||
zend_execute_data *ptr, *skip;
|
||||
int lineno;
|
||||
@@ -2168,7 +2187,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
add_assoc_string_ex(stack_frame, "class", sizeof("class"), class_name, dup);
|
||||
|
||||
}
|
||||
if ((options & DEBUG_BACKTRACE_PROVIDE_OBJECT) != 0) {
|
||||
if (provide_object) {
|
||||
add_assoc_zval_ex(stack_frame, "object", sizeof("object"), ptr->object);
|
||||
Z_ADDREF_P(ptr->object);
|
||||
}
|
||||
@@ -2179,8 +2198,7 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
add_assoc_string_ex(stack_frame, "type", sizeof("type"), "::", 1);
|
||||
}
|
||||
|
||||
if ((options & DEBUG_BACKTRACE_IGNORE_ARGS) == 0 &&
|
||||
((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL)))) {
|
||||
if ((! ptr->opline) || ((ptr->opline->opcode == ZEND_DO_FCALL_BY_NAME) || (ptr->opline->opcode == ZEND_DO_FCALL))) {
|
||||
if (ptr->function_state.arguments) {
|
||||
add_assoc_zval_ex(stack_frame, "args", sizeof("args"), debug_backtrace_get_args(ptr->function_state.arguments TSRMLS_CC));
|
||||
}
|
||||
@@ -2246,17 +2264,17 @@ ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int
|
||||
/* }}} */
|
||||
|
||||
|
||||
/* {{{ proto array debug_backtrace([int options])
|
||||
/* {{{ proto array debug_backtrace([bool provide_object])
|
||||
Return backtrace as array */
|
||||
ZEND_FUNCTION(debug_backtrace)
|
||||
{
|
||||
long options = DEBUG_BACKTRACE_PROVIDE_OBJECT;
|
||||
zend_bool provide_object = 1;
|
||||
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &options) == FAILURE) {
|
||||
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &provide_object) == FAILURE) {
|
||||
return;
|
||||
}
|
||||
|
||||
zend_fetch_debug_backtrace(return_value, 1, options TSRMLS_CC);
|
||||
zend_fetch_debug_backtrace(return_value, 1, provide_object TSRMLS_CC);
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -25,7 +25,7 @@
|
||||
int zend_startup_builtin_functions(TSRMLS_D);
|
||||
|
||||
BEGIN_EXTERN_C()
|
||||
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int options TSRMLS_DC);
|
||||
ZEND_API void zend_fetch_debug_backtrace(zval *return_value, int skip_last, int provide_object TSRMLS_DC);
|
||||
END_EXTERN_C()
|
||||
|
||||
#endif /* ZEND_BUILTIN_FUNCTIONS_H */
|
||||
|
||||
+7
-16
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -323,7 +323,6 @@ static int zval_copy_static_var(zval **p TSRMLS_DC, int num_args, va_list args,
|
||||
{
|
||||
HashTable *target = va_arg(args, HashTable*);
|
||||
zend_bool is_ref;
|
||||
zval *tmp;
|
||||
|
||||
if (Z_TYPE_PP(p) & (IS_LEXICAL_VAR|IS_LEXICAL_REF)) {
|
||||
is_ref = Z_TYPE_PP(p) & IS_LEXICAL_REF;
|
||||
@@ -333,32 +332,25 @@ static int zval_copy_static_var(zval **p TSRMLS_DC, int num_args, va_list args,
|
||||
}
|
||||
if (zend_hash_quick_find(EG(active_symbol_table), key->arKey, key->nKeyLength, key->h, (void **) &p) == FAILURE) {
|
||||
if (is_ref) {
|
||||
zval *tmp;
|
||||
|
||||
ALLOC_INIT_ZVAL(tmp);
|
||||
Z_SET_ISREF_P(tmp);
|
||||
zend_hash_quick_add(EG(active_symbol_table), key->arKey, key->nKeyLength, key->h, &tmp, sizeof(zval*), (void**)&p);
|
||||
} else {
|
||||
tmp = EG(uninitialized_zval_ptr);
|
||||
p = &EG(uninitialized_zval_ptr);
|
||||
zend_error(E_NOTICE,"Undefined variable: %s", key->arKey);
|
||||
}
|
||||
} else {
|
||||
if (is_ref) {
|
||||
SEPARATE_ZVAL_TO_MAKE_IS_REF(p);
|
||||
tmp = *p;
|
||||
} else if (Z_ISREF_PP(p)) {
|
||||
ALLOC_INIT_ZVAL(tmp);
|
||||
*tmp = **p;
|
||||
zval_copy_ctor(tmp);
|
||||
Z_SET_REFCOUNT_P(tmp, 0);
|
||||
Z_UNSET_ISREF_P(tmp);
|
||||
} else {
|
||||
tmp = *p;
|
||||
SEPARATE_ZVAL(p);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tmp = *p;
|
||||
}
|
||||
if (zend_hash_quick_add(target, key->arKey, key->nKeyLength, key->h, &tmp, sizeof(zval*), NULL) == SUCCESS) {
|
||||
Z_ADDREF_P(tmp);
|
||||
if (zend_hash_quick_add(target, key->arKey, key->nKeyLength, key->h, p, sizeof(zval*), NULL) == SUCCESS) {
|
||||
Z_ADDREF_PP(p);
|
||||
}
|
||||
return ZEND_HASH_APPLY_KEEP;
|
||||
}
|
||||
@@ -373,7 +365,6 @@ ZEND_API void zend_create_closure(zval *res, zend_function *func TSRMLS_DC) /* {
|
||||
closure = (zend_closure *)zend_object_store_get_object(res TSRMLS_CC);
|
||||
|
||||
closure->func = *func;
|
||||
closure->func.common.prototype = NULL;
|
||||
|
||||
if (closure->func.type == ZEND_USER_FUNCTION) {
|
||||
if (closure->func.op_array.static_variables) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+63
-89
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -387,7 +387,6 @@ void fetch_simple_variable_ex(znode *result, znode *varname, int bp, zend_uchar
|
||||
result->op_type = IS_CV;
|
||||
result->u.var = lookup_cv(CG(active_op_array), varname->u.constant.value.str.val, varname->u.constant.value.str.len);
|
||||
result->u.EA.type = 0;
|
||||
varname->u.constant.value.str.val = CG(active_op_array)->vars[result->u.var].name;
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -626,7 +625,7 @@ void zend_do_assign(znode *result, znode *variable, const znode *value TSRMLS_DC
|
||||
if (variable->op_type == IS_CV) {
|
||||
if (variable->u.var == CG(active_op_array)->this_var) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot re-assign $this");
|
||||
}
|
||||
}
|
||||
} else if (variable->op_type == IS_VAR) {
|
||||
int n = 0;
|
||||
|
||||
@@ -706,7 +705,7 @@ void zend_do_assign_ref(znode *result, const znode *lvar, const znode *rvar TSRM
|
||||
if (lvar->op_type == IS_CV) {
|
||||
if (lvar->u.var == CG(active_op_array)->this_var) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot re-assign $this");
|
||||
}
|
||||
}
|
||||
} else if (lvar->op_type == IS_VAR) {
|
||||
int last_op_number = get_next_op_number(CG(active_op_array));
|
||||
|
||||
@@ -1009,7 +1008,7 @@ void zend_do_end_variable_parse(znode *variable, int type, int arg_offset TSRMLS
|
||||
variable->op_type = IS_CV;
|
||||
variable->u.var = CG(active_op_array)->this_var;
|
||||
}
|
||||
} else if (CG(active_op_array)->this_var == -1) {
|
||||
} else if (CG(active_op_array)->this_var == -1) {
|
||||
CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1);
|
||||
}
|
||||
}
|
||||
@@ -1895,14 +1894,14 @@ void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2
|
||||
long current, distance;
|
||||
|
||||
if (CG(labels) == NULL ||
|
||||
zend_hash_find(CG(labels), Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void**)&dest) == FAILURE) {
|
||||
zend_hash_find(CG(labels), Z_STRVAL(opline->op2.u.constant), Z_STRLEN(opline->op2.u.constant)+1, (void**)&dest) == FAILURE) {
|
||||
|
||||
if (pass2) {
|
||||
CG(in_compilation) = 1;
|
||||
CG(active_op_array) = op_array;
|
||||
CG(zend_lineno) = opline->lineno;
|
||||
if (pass2) {
|
||||
CG(in_compilation) = 1;
|
||||
CG(active_op_array) = op_array;
|
||||
CG(zend_lineno) = opline->lineno;
|
||||
zend_error(E_COMPILE_ERROR, "'goto' to undefined label '%s'", Z_STRVAL(opline->op2.u.constant));
|
||||
} else {
|
||||
} else {
|
||||
/* Label is not defined. Delay to pass 2. */
|
||||
INC_BPC(op_array);
|
||||
return;
|
||||
@@ -1916,11 +1915,11 @@ void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2
|
||||
current = opline->extended_value;
|
||||
for (distance = 0; current != dest->brk_cont; distance++) {
|
||||
if (current == -1) {
|
||||
if (pass2) {
|
||||
CG(in_compilation) = 1;
|
||||
CG(active_op_array) = op_array;
|
||||
CG(zend_lineno) = opline->lineno;
|
||||
}
|
||||
if (pass2) {
|
||||
CG(in_compilation) = 1;
|
||||
CG(active_op_array) = op_array;
|
||||
CG(zend_lineno) = opline->lineno;
|
||||
}
|
||||
zend_error(E_COMPILE_ERROR, "'goto' into loop or switch statement is disallowed");
|
||||
}
|
||||
current = op_array->brk_cont_array[current].parent;
|
||||
@@ -1936,9 +1935,9 @@ void zend_resolve_goto_label(zend_op_array *op_array, zend_op *opline, int pass2
|
||||
ZVAL_LONG(&opline->op2.u.constant, distance);
|
||||
}
|
||||
|
||||
if (pass2) {
|
||||
if (pass2) {
|
||||
DEC_BPC(op_array);
|
||||
}
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -2010,7 +2009,7 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na
|
||||
if (method_name->op_type == IS_CONST) {
|
||||
char *lcname = zend_str_tolower_dup(Z_STRVAL(method_name->u.constant), Z_STRLEN(method_name->u.constant));
|
||||
if ((sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == Z_STRLEN(method_name->u.constant) &&
|
||||
memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
|
||||
memcmp(lcname, ZEND_CONSTRUCTOR_FUNC_NAME, sizeof(ZEND_CONSTRUCTOR_FUNC_NAME)-1) == 0) {
|
||||
zval_dtor(&method_name->u.constant);
|
||||
SET_UNUSED(*method_name);
|
||||
}
|
||||
@@ -2018,7 +2017,7 @@ int zend_do_begin_class_member_function_call(znode *class_name, znode *method_na
|
||||
}
|
||||
|
||||
if (class_name->op_type == IS_CONST &&
|
||||
ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
|
||||
ZEND_FETCH_CLASS_DEFAULT == zend_get_class_fetch_type(Z_STRVAL(class_name->u.constant), Z_STRLEN(class_name->u.constant))) {
|
||||
fetch_type = ZEND_FETCH_CLASS_GLOBAL;
|
||||
zend_resolve_class_name(class_name, &fetch_type, 1 TSRMLS_CC);
|
||||
class_node = *class_name;
|
||||
@@ -2081,9 +2080,9 @@ void zend_do_pass_param(znode *param, zend_uchar op, int offset TSRMLS_DC) /* {{
|
||||
|
||||
if (original_op == ZEND_SEND_REF && !CG(allow_call_time_pass_reference)) {
|
||||
if (function_ptr &&
|
||||
function_ptr->common.function_name &&
|
||||
function_ptr->common.type == ZEND_USER_FUNCTION &&
|
||||
!ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) {
|
||||
function_ptr->common.function_name &&
|
||||
function_ptr->common.type == ZEND_USER_FUNCTION &&
|
||||
!ARG_SHOULD_BE_SENT_BY_REF(function_ptr, (zend_uint) offset)) {
|
||||
zend_error(E_DEPRECATED,
|
||||
"Call-time pass-by-reference has been deprecated; "
|
||||
"If you would like to pass it by reference, modify the declaration of %s(). "
|
||||
@@ -2529,7 +2528,7 @@ static void do_inherit_method(zend_function *function) /* {{{ */
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
static zend_bool zend_do_perform_implementation_check(const zend_function *fe, const zend_function *proto TSRMLS_DC) /* {{{ */
|
||||
static zend_bool zend_do_perform_implementation_check(const zend_function *fe, const zend_function *proto) /* {{{ */
|
||||
{
|
||||
zend_uint i;
|
||||
|
||||
@@ -2572,24 +2571,11 @@ static zend_bool zend_do_perform_implementation_check(const zend_function *fe, c
|
||||
&& strcasecmp(fe->common.arg_info[i].class_name, proto->common.arg_info[i].class_name)!=0) {
|
||||
char *colon;
|
||||
|
||||
if (fe->common.type != ZEND_USER_FUNCTION) {
|
||||
return 0;
|
||||
} else if (strchr(proto->common.arg_info[i].class_name, '\\') != NULL ||
|
||||
if (fe->common.type != ZEND_USER_FUNCTION ||
|
||||
strchr(proto->common.arg_info[i].class_name, '\\') != NULL ||
|
||||
(colon = zend_memrchr(fe->common.arg_info[i].class_name, '\\', fe->common.arg_info[i].class_name_len)) == NULL ||
|
||||
strcasecmp(colon+1, proto->common.arg_info[i].class_name) != 0) {
|
||||
zend_class_entry **fe_ce, **proto_ce;
|
||||
int found, found2;
|
||||
|
||||
found = zend_lookup_class(fe->common.arg_info[i].class_name, fe->common.arg_info[i].class_name_len, &fe_ce TSRMLS_CC);
|
||||
found2 = zend_lookup_class(proto->common.arg_info[i].class_name, proto->common.arg_info[i].class_name_len, &proto_ce TSRMLS_CC);
|
||||
|
||||
/* Check for class alias */
|
||||
if (found != SUCCESS || found2 != SUCCESS ||
|
||||
(*fe_ce)->type == ZEND_INTERNAL_CLASS ||
|
||||
(*proto_ce)->type == ZEND_INTERNAL_CLASS ||
|
||||
*fe_ce != *proto_ce) {
|
||||
return 0;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
if (fe->common.arg_info[i].array_type_hint != proto->common.arg_info[i].array_type_hint) {
|
||||
@@ -2681,11 +2667,11 @@ static zend_bool do_inherit_method_check(HashTable *child_function_table, zend_f
|
||||
}
|
||||
|
||||
if (child->common.prototype && (child->common.prototype->common.fn_flags & ZEND_ACC_ABSTRACT)) {
|
||||
if (!zend_do_perform_implementation_check(child, child->common.prototype TSRMLS_CC)) {
|
||||
if (!zend_do_perform_implementation_check(child, child->common.prototype)) {
|
||||
zend_error(E_COMPILE_ERROR, "Declaration of %s::%s() must be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(child->common.prototype), child->common.prototype->common.function_name);
|
||||
}
|
||||
} else if (EG(error_reporting) & E_STRICT || EG(user_error_handler)) { /* Check E_STRICT (or custom error handler) before the check so that we save some time */
|
||||
if (!zend_do_perform_implementation_check(child, parent TSRMLS_CC)) {
|
||||
if (!zend_do_perform_implementation_check(child, parent)) {
|
||||
zend_error(E_STRICT, "Declaration of %s::%s() should be compatible with that of %s::%s()", ZEND_FN_SCOPE_NAME(child), child->common.function_name, ZEND_FN_SCOPE_NAME(parent), parent->common.function_name);
|
||||
}
|
||||
}
|
||||
@@ -3073,9 +3059,9 @@ void zend_do_early_binding(TSRMLS_D) /* {{{ */
|
||||
zend_class_entry **pce;
|
||||
|
||||
if ((zend_lookup_class(Z_STRVAL_P(parent_name), Z_STRLEN_P(parent_name), &pce TSRMLS_CC) == FAILURE) ||
|
||||
((CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_CLASSES) &&
|
||||
((*pce)->type == ZEND_INTERNAL_CLASS))) {
|
||||
if (CG(compiler_options) & ZEND_COMPILE_DELAYED_BINDING) {
|
||||
((CG(compiler_options) & ZEND_COMPILE_IGNORE_INTERNAL_CLASSES) &&
|
||||
((*pce)->type == ZEND_INTERNAL_CLASS))) {
|
||||
if (CG(compiler_options) & ZEND_COMPILE_DELAYED_BINDING) {
|
||||
zend_uint *opline_num = &CG(active_op_array)->early_binding;
|
||||
|
||||
while (*opline_num != -1) {
|
||||
@@ -3405,7 +3391,7 @@ void zend_do_begin_class_declaration(const znode *class_token, znode *class_name
|
||||
|
||||
/* Class name must not conflict with import names */
|
||||
if (CG(current_import) &&
|
||||
zend_hash_find(CG(current_import), lcname, Z_STRLEN(class_name->u.constant)+1, (void**)&ns_name) == SUCCESS) {
|
||||
zend_hash_find(CG(current_import), lcname, Z_STRLEN(class_name->u.constant)+1, (void**)&ns_name) == SUCCESS) {
|
||||
error = 1;
|
||||
}
|
||||
|
||||
@@ -3640,7 +3626,7 @@ void zend_do_declare_property(const znode *var_name, const znode *value, zend_ui
|
||||
|
||||
if (access_type & ZEND_ACC_FINAL) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot declare property %s::$%s final, the final modifier is allowed only for methods and classes",
|
||||
CG(active_class_entry)->name, var_name->u.constant.value.str.val);
|
||||
CG(active_class_entry)->name, var_name->u.constant.value.str.val);
|
||||
}
|
||||
|
||||
if (zend_hash_find(&CG(active_class_entry)->properties_info, var_name->u.constant.value.str.val, var_name->u.constant.value.str.len+1, (void **) &existing_property_info)==SUCCESS) {
|
||||
@@ -3703,8 +3689,8 @@ void zend_do_fetch_property(znode *result, znode *object, const znode *property
|
||||
|
||||
if (object->op_type == IS_CV) {
|
||||
if (object->u.var == CG(active_op_array)->this_var) {
|
||||
SET_UNUSED(*object); /* this means $this for objects */
|
||||
}
|
||||
SET_UNUSED(*object); /* this means $this for objects */
|
||||
}
|
||||
} else if (fetch_list_ptr->count == 1) {
|
||||
zend_llist_element *le = fetch_list_ptr->head;
|
||||
zend_op *opline_ptr = (zend_op *) le->data;
|
||||
@@ -3762,10 +3748,6 @@ void zend_do_halt_compiler_register(TSRMLS_D) /* {{{ */
|
||||
zend_mangle_property_name(&name, &len, haltoff, sizeof(haltoff) - 1, cfilename, clen, 0);
|
||||
zend_register_long_constant(name, len+1, zend_get_scanned_file_offset(TSRMLS_C), CONST_CS, 0 TSRMLS_CC);
|
||||
pefree(name, 0);
|
||||
|
||||
if (CG(in_namespace)) {
|
||||
zend_do_end_namespace(TSRMLS_C);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -3883,10 +3865,10 @@ static zend_constant* zend_get_ct_const(const zval *const_name, int all_internal
|
||||
return c;
|
||||
}
|
||||
if (all_internal_constants_substitution &&
|
||||
(c->flags & CONST_PERSISTENT) &&
|
||||
!(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION) &&
|
||||
Z_TYPE(c->value) != IS_CONSTANT &&
|
||||
Z_TYPE(c->value) != IS_CONSTANT_ARRAY) {
|
||||
(c->flags & CONST_PERSISTENT) &&
|
||||
!(CG(compiler_options) & ZEND_COMPILE_NO_CONSTANT_SUBSTITUTION) &&
|
||||
Z_TYPE(c->value) != IS_CONSTANT &&
|
||||
Z_TYPE(c->value) != IS_CONSTANT_ARRAY) {
|
||||
return c;
|
||||
}
|
||||
return NULL;
|
||||
@@ -4279,7 +4261,7 @@ void zend_do_fetch_lexical_variable(znode *varname, zend_bool is_ref TSRMLS_DC)
|
||||
znode value;
|
||||
|
||||
if (Z_STRLEN(varname->u.constant) == sizeof("this") - 1 &&
|
||||
memcmp(Z_STRVAL(varname->u.constant), "this", sizeof("this") - 1) == 0) {
|
||||
memcmp(Z_STRVAL(varname->u.constant), "this", sizeof("this") - 1) == 0) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot use $this as lexical variable");
|
||||
return;
|
||||
}
|
||||
@@ -4369,10 +4351,6 @@ void zend_do_indirect_references(znode *result, const znode *num_references, zno
|
||||
}
|
||||
zend_do_begin_variable_parse(TSRMLS_C);
|
||||
fetch_simple_variable(result, variable, 1 TSRMLS_CC);
|
||||
/* there is a chance someone is accessing $this */
|
||||
if (CG(active_op_array)->scope && CG(active_op_array)->this_var == -1) {
|
||||
CG(active_op_array)->this_var = lookup_cv(CG(active_op_array), estrndup("this", sizeof("this")-1), sizeof("this")-1);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -4493,7 +4471,7 @@ void zend_do_foreach_begin(znode *foreach_token, znode *open_brackets_token, zno
|
||||
open_brackets_token->u.opline_num = get_next_op_number(CG(active_op_array));
|
||||
zend_do_end_variable_parse(array, BP_VAR_W, 0 TSRMLS_CC);
|
||||
if (CG(active_op_array)->last > 0 &&
|
||||
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode == ZEND_FETCH_OBJ_W) {
|
||||
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].opcode == ZEND_FETCH_OBJ_W) {
|
||||
/* Only lock the container if we are fetching from a real container and not $this */
|
||||
if (CG(active_op_array)->opcodes[CG(active_op_array)->last-1].op1.op_type == IS_VAR) {
|
||||
CG(active_op_array)->opcodes[CG(active_op_array)->last-1].extended_value |= ZEND_FETCH_ADD_LOCK;
|
||||
@@ -4680,8 +4658,8 @@ void zend_do_declare_stmt(znode *var, znode *val TSRMLS_DC) /* {{{ */
|
||||
int num = CG(active_op_array)->last;
|
||||
/* ignore ZEND_EXT_STMT and ZEND_TICKS */
|
||||
while (num > 0 &&
|
||||
(CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
|
||||
CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
|
||||
(CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
|
||||
CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
|
||||
--num;
|
||||
}
|
||||
|
||||
@@ -4914,12 +4892,14 @@ void zend_do_extended_fcall_end(TSRMLS_D) /* {{{ */
|
||||
|
||||
void zend_do_ticks(TSRMLS_D) /* {{{ */
|
||||
{
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
if (Z_LVAL(CG(declarables).ticks)) {
|
||||
zend_op *opline = get_next_op(CG(active_op_array) TSRMLS_CC);
|
||||
|
||||
opline->opcode = ZEND_TICKS;
|
||||
opline->op1.u.constant = CG(declarables).ticks;
|
||||
opline->op1.op_type = IS_CONST;
|
||||
SET_UNUSED(opline->op2);
|
||||
opline->opcode = ZEND_TICKS;
|
||||
opline->op1.u.constant = CG(declarables).ticks;
|
||||
opline->op1.op_type = IS_CONST;
|
||||
SET_UNUSED(opline->op2);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -5093,7 +5073,7 @@ void zend_do_build_namespace_name(znode *result, znode *prefix, znode *name TSRM
|
||||
if (prefix) {
|
||||
*result = *prefix;
|
||||
if (Z_TYPE(result->u.constant) == IS_STRING &&
|
||||
Z_STRLEN(result->u.constant) == 0) {
|
||||
Z_STRLEN(result->u.constant) == 0) {
|
||||
/* namespace\ */
|
||||
if (CG(current_namespace)) {
|
||||
znode tmp;
|
||||
@@ -5141,8 +5121,8 @@ void zend_do_begin_namespace(const znode *name, zend_bool with_bracket TSRMLS_DC
|
||||
/* ignore ZEND_EXT_STMT and ZEND_TICKS */
|
||||
int num = CG(active_op_array)->last;
|
||||
while (num > 0 &&
|
||||
(CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
|
||||
CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
|
||||
(CG(active_op_array)->opcodes[num-1].opcode == ZEND_EXT_STMT ||
|
||||
CG(active_op_array)->opcodes[num-1].opcode == ZEND_TICKS)) {
|
||||
--num;
|
||||
}
|
||||
if (num > 0) {
|
||||
@@ -5158,9 +5138,9 @@ void zend_do_begin_namespace(const znode *name, zend_bool with_bracket TSRMLS_DC
|
||||
if (name) {
|
||||
lcname = zend_str_tolower_dup(Z_STRVAL(name->u.constant), Z_STRLEN(name->u.constant));
|
||||
if (((Z_STRLEN(name->u.constant) == sizeof("self")-1) &&
|
||||
!memcmp(lcname, "self", sizeof("self")-1)) ||
|
||||
((Z_STRLEN(name->u.constant) == sizeof("parent")-1) &&
|
||||
!memcmp(lcname, "parent", sizeof("parent")-1))) {
|
||||
!memcmp(lcname, "self", sizeof("self")-1)) ||
|
||||
((Z_STRLEN(name->u.constant) == sizeof("parent")-1) &&
|
||||
!memcmp(lcname, "parent", sizeof("parent")-1))) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot use '%s' as namespace name", Z_STRVAL(name->u.constant));
|
||||
}
|
||||
efree(lcname);
|
||||
@@ -5222,9 +5202,9 @@ void zend_do_use(znode *ns_name, znode *new_name, int is_global TSRMLS_DC) /* {{
|
||||
lcname = zend_str_tolower_dup(Z_STRVAL_P(name), Z_STRLEN_P(name));
|
||||
|
||||
if (((Z_STRLEN_P(name) == sizeof("self")-1) &&
|
||||
!memcmp(lcname, "self", sizeof("self")-1)) ||
|
||||
((Z_STRLEN_P(name) == sizeof("parent")-1) &&
|
||||
!memcmp(lcname, "parent", sizeof("parent")-1))) {
|
||||
!memcmp(lcname, "self", sizeof("self")-1)) ||
|
||||
((Z_STRLEN_P(name) == sizeof("parent")-1) &&
|
||||
!memcmp(lcname, "parent", sizeof("parent")-1))) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot use %s as %s because '%s' is a special class name", Z_STRVAL_P(ns), Z_STRVAL_P(name), Z_STRVAL_P(name));
|
||||
}
|
||||
|
||||
@@ -5236,13 +5216,13 @@ void zend_do_use(znode *ns_name, znode *new_name, int is_global TSRMLS_DC) /* {{
|
||||
c_ns_name[Z_STRLEN_P(CG(current_namespace))] = '\\';
|
||||
memcpy(c_ns_name+Z_STRLEN_P(CG(current_namespace))+1, lcname, Z_STRLEN_P(name)+1);
|
||||
if (zend_hash_exists(CG(class_table), c_ns_name, Z_STRLEN_P(CG(current_namespace)) + 1 + Z_STRLEN_P(name)+1)) {
|
||||
char *tmp2 = zend_str_tolower_dup(Z_STRVAL_P(ns), Z_STRLEN_P(ns));
|
||||
char *tmp = zend_str_tolower_dup(Z_STRVAL_P(ns), Z_STRLEN_P(ns));
|
||||
|
||||
if (Z_STRLEN_P(ns) != Z_STRLEN_P(CG(current_namespace)) + 1 + Z_STRLEN_P(name) ||
|
||||
memcmp(tmp2, c_ns_name, Z_STRLEN_P(ns))) {
|
||||
memcmp(tmp, c_ns_name, Z_STRLEN_P(ns))) {
|
||||
zend_error(E_COMPILE_ERROR, "Cannot use %s as %s because the name is already in use", Z_STRVAL_P(ns), Z_STRVAL_P(name));
|
||||
}
|
||||
efree(tmp2);
|
||||
efree(tmp);
|
||||
}
|
||||
efree(c_ns_name);
|
||||
} else if (zend_hash_find(CG(class_table), lcname, Z_STRLEN_P(name)+1, (void**)&pce) == SUCCESS &&
|
||||
@@ -5320,12 +5300,6 @@ void zend_do_end_namespace(TSRMLS_D) /* {{{ */
|
||||
efree(CG(current_import));
|
||||
CG(current_import) = NULL;
|
||||
}
|
||||
|
||||
if (CG(doc_comment)) {
|
||||
efree(CG(doc_comment));
|
||||
CG(doc_comment) = NULL;
|
||||
CG(doc_comment_len) = 0;
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -5374,7 +5348,7 @@ ZEND_API size_t zend_dirname(char *path, size_t len)
|
||||
if (len_adjust == len) {
|
||||
return len;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
if (len == 0) {
|
||||
|
||||
+1
-2
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -39,7 +39,6 @@
|
||||
#define INC_BPC(op_array) if (op_array->fn_flags & ZEND_ACC_INTERACTIVE) { ((op_array)->backpatch_count++); }
|
||||
#define DEC_BPC(op_array) if (op_array->fn_flags & ZEND_ACC_INTERACTIVE) { ((op_array)->backpatch_count--); }
|
||||
#define HANDLE_INTERACTIVE() if (CG(active_op_array)->fn_flags & ZEND_ACC_INTERACTIVE) { execute_new_code(TSRMLS_C); }
|
||||
#define DO_TICKS() if (Z_LVAL(CG(declarables).ticks)) { zend_do_ticks(TSRMLS_C); }
|
||||
|
||||
#define RESET_DOC_COMMENT() \
|
||||
{ \
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -113,8 +113,6 @@ void zend_register_standard_constants(TSRMLS_D)
|
||||
|
||||
REGISTER_MAIN_LONG_CONSTANT("E_ALL", E_ALL, CONST_PERSISTENT | CONST_CS);
|
||||
|
||||
REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_PROVIDE_OBJECT", DEBUG_BACKTRACE_PROVIDE_OBJECT, CONST_PERSISTENT | CONST_CS);
|
||||
REGISTER_MAIN_LONG_CONSTANT("DEBUG_BACKTRACE_IGNORE_ARGS", DEBUG_BACKTRACE_IGNORE_ARGS, CONST_PERSISTENT | CONST_CS);
|
||||
/* true/false constants */
|
||||
{
|
||||
zend_constant c;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -91,9 +91,6 @@ void zend_throw_exception_internal(zval *exception TSRMLS_DC) /* {{{ */
|
||||
}
|
||||
}
|
||||
if (!EG(current_execute_data)) {
|
||||
if(EG(exception)) {
|
||||
zend_exception_error(EG(exception), E_ERROR TSRMLS_CC);
|
||||
}
|
||||
zend_error(E_ERROR, "Exception thrown without a stack frame");
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+4
-16
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -536,22 +536,10 @@ static inline void zend_assign_to_object(znode *result, zval **object_ptr, zval
|
||||
(Z_TYPE_P(object) == IS_BOOL && Z_LVAL_P(object) == 0) ||
|
||||
(Z_TYPE_P(object) == IS_STRING && Z_STRLEN_P(object) == 0)) {
|
||||
SEPARATE_ZVAL_IF_NOT_REF(object_ptr);
|
||||
zval_dtor(*object_ptr);
|
||||
object_init(*object_ptr);
|
||||
object = *object_ptr;
|
||||
Z_ADDREF_P(object);
|
||||
zend_error(E_STRICT, "Creating default object from empty value");
|
||||
if (Z_REFCOUNT_P(object) == 1) {
|
||||
/* object was removed by error handler, nothing to assign to */
|
||||
zval_ptr_dtor(&object);
|
||||
if (retval) {
|
||||
*retval = &EG(uninitialized_zval);
|
||||
PZVAL_LOCK(*retval);
|
||||
}
|
||||
FREE_OP(free_value);
|
||||
return;
|
||||
}
|
||||
Z_DELREF_P(object);
|
||||
zval_dtor(object);
|
||||
object_init(object);
|
||||
} else {
|
||||
zend_error(E_WARNING, "Attempt to assign property of non-object");
|
||||
if (!RETURN_VALUE_UNUSED(result)) {
|
||||
@@ -1079,7 +1067,7 @@ static void zend_fetch_dimension_address_read(temp_variable *result, zval **cont
|
||||
dim = &tmp;
|
||||
}
|
||||
if (result) {
|
||||
if ((Z_LVAL_P(dim) < 0 || Z_STRLEN_P(container) <= Z_LVAL_P(dim)) && type != BP_VAR_IS) {
|
||||
if (Z_LVAL_P(dim) < 0 || Z_STRLEN_P(container) <= Z_LVAL_P(dim)) {
|
||||
zend_error(E_NOTICE, "Uninitialized string offset: %ld", Z_LVAL_P(dim));
|
||||
}
|
||||
result->str_offset.str = container;
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+10
-14
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -296,9 +296,7 @@ void shutdown_executor(TSRMLS_D) /* {{{ */
|
||||
zend_hash_reverse_apply(EG(function_table), (apply_func_t) zend_cleanup_function_data TSRMLS_CC);
|
||||
}
|
||||
zend_hash_apply(EG(class_table), (apply_func_t) zend_cleanup_class_data TSRMLS_CC);
|
||||
} zend_end_try();
|
||||
|
||||
zend_try {
|
||||
zend_vm_stack_destroy(TSRMLS_C);
|
||||
|
||||
zend_objects_store_free_object_storage(&EG(objects_store) TSRMLS_CC);
|
||||
@@ -433,28 +431,26 @@ ZEND_API zend_bool zend_is_executing(TSRMLS_D) /* {{{ */
|
||||
|
||||
ZEND_API void _zval_ptr_dtor(zval **zval_ptr ZEND_FILE_LINE_DC) /* {{{ */
|
||||
{
|
||||
zval *zv = *zval_ptr;
|
||||
|
||||
#if DEBUG_ZEND>=2
|
||||
printf("Reducing refcount for %x (%x): %d->%d\n", *zval_ptr, zval_ptr, Z_REFCOUNT_PP(zval_ptr), Z_REFCOUNT_PP(zval_ptr) - 1);
|
||||
#endif
|
||||
Z_DELREF_P(zv);
|
||||
if (Z_REFCOUNT_P(zv) == 0) {
|
||||
Z_DELREF_PP(zval_ptr);
|
||||
if (Z_REFCOUNT_PP(zval_ptr) == 0) {
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (zv != &EG(uninitialized_zval)) {
|
||||
GC_REMOVE_ZVAL_FROM_BUFFER(zv);
|
||||
zval_dtor(zv);
|
||||
efree_rel(zv);
|
||||
if (*zval_ptr != &EG(uninitialized_zval)) {
|
||||
GC_REMOVE_ZVAL_FROM_BUFFER(*zval_ptr);
|
||||
zval_dtor(*zval_ptr);
|
||||
efree_rel(*zval_ptr);
|
||||
}
|
||||
} else {
|
||||
TSRMLS_FETCH();
|
||||
|
||||
if (Z_REFCOUNT_P(zv) == 1) {
|
||||
Z_UNSET_ISREF_P(zv);
|
||||
if (Z_REFCOUNT_PP(zval_ptr) == 1) {
|
||||
Z_UNSET_ISREF_PP(zval_ptr);
|
||||
}
|
||||
|
||||
GC_ZVAL_CHECK_POSSIBLE_ROOT(zv);
|
||||
GC_ZVAL_CHECK_POSSIBLE_ROOT(*zval_ptr);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+87
-110
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -545,15 +545,9 @@ ZEND_API void zend_hash_clean(HashTable *ht)
|
||||
|
||||
IS_CONSISTENT(ht);
|
||||
|
||||
SET_INCONSISTENT(HT_CLEANING);
|
||||
|
||||
p = ht->pListHead;
|
||||
|
||||
memset(ht->arBuckets, 0, ht->nTableSize*sizeof(Bucket *));
|
||||
ht->pListHead = NULL;
|
||||
ht->pListTail = NULL;
|
||||
ht->nNumOfElements = 0;
|
||||
ht->nNextFreeElement = 0;
|
||||
ht->pInternalPointer = NULL;
|
||||
|
||||
while (p != NULL) {
|
||||
q = p;
|
||||
p = p->pListNext;
|
||||
@@ -565,6 +559,14 @@ ZEND_API void zend_hash_clean(HashTable *ht)
|
||||
}
|
||||
pefree(q, ht->persistent);
|
||||
}
|
||||
memset(ht->arBuckets, 0, ht->nTableSize*sizeof(Bucket *));
|
||||
ht->pListHead = NULL;
|
||||
ht->pListTail = NULL;
|
||||
ht->nNumOfElements = 0;
|
||||
ht->nNextFreeElement = 0;
|
||||
ht->pInternalPointer = NULL;
|
||||
|
||||
SET_INCONSISTENT(HT_OK);
|
||||
}
|
||||
|
||||
/* This function is used by the various apply() functions.
|
||||
@@ -735,7 +737,6 @@ ZEND_API void zend_hash_apply_with_arguments(HashTable *ht TSRMLS_DC, apply_func
|
||||
p = p->pListNext;
|
||||
}
|
||||
if (result & ZEND_HASH_APPLY_STOP) {
|
||||
va_end(args);
|
||||
break;
|
||||
}
|
||||
va_end(args);
|
||||
@@ -1169,12 +1170,12 @@ ZEND_API int zend_hash_get_current_data_ex(HashTable *ht, void **pData, HashPosi
|
||||
}
|
||||
}
|
||||
|
||||
/* This function changes key of current element without changing elements'
|
||||
/* This function changes key of currevt element without changing elements'
|
||||
* order. If element with target key already exists, it will be deleted first.
|
||||
*/
|
||||
ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const char *str_index, uint str_length, ulong num_index, int mode, HashPosition *pos)
|
||||
{
|
||||
Bucket *p, *q;
|
||||
Bucket *p;
|
||||
|
||||
p = pos ? (*pos) : ht->pInternalPointer;
|
||||
|
||||
@@ -1187,124 +1188,100 @@ ZEND_API int zend_hash_update_current_key_ex(HashTable *ht, int key_type, const
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
q = ht->arBuckets[num_index & ht->nTableMask];
|
||||
while (q != NULL) {
|
||||
if (!q->nKeyLength && q->h == num_index) {
|
||||
break;
|
||||
}
|
||||
q = q->pNext;
|
||||
}
|
||||
} else if (key_type == HASH_KEY_IS_STRING) {
|
||||
ulong h;
|
||||
if (mode != HASH_UPDATE_KEY_ANYWAY) {
|
||||
Bucket *q = ht->arBuckets[num_index & ht->nTableMask];
|
||||
int found = 0;
|
||||
|
||||
while (q != NULL) {
|
||||
if (q == p) {
|
||||
found = 1;
|
||||
} else if (!q->nKeyLength && q->h == num_index) {
|
||||
if (found) {
|
||||
if (mode & HASH_UPDATE_KEY_IF_BEFORE) {
|
||||
break;
|
||||
} else {
|
||||
if (p->nKeyLength) {
|
||||
zend_hash_del(ht, p->arKey, p->nKeyLength);
|
||||
} else {
|
||||
zend_hash_index_del(ht, p->h);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
} else {
|
||||
if (mode & HASH_UPDATE_KEY_IF_AFTER) {
|
||||
break;
|
||||
} else {
|
||||
if (p->nKeyLength) {
|
||||
zend_hash_del(ht, p->arKey, p->nKeyLength);
|
||||
} else {
|
||||
zend_hash_index_del(ht, p->h);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
q = q->pNext;
|
||||
}
|
||||
}
|
||||
|
||||
zend_hash_index_del(ht, num_index);
|
||||
} else if (key_type == HASH_KEY_IS_STRING) {
|
||||
if (p->nKeyLength == str_length &&
|
||||
memcmp(p->arKey, str_index, str_length) == 0) {
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
h = zend_inline_hash_func(str_index, str_length);
|
||||
q = ht->arBuckets[h & ht->nTableMask];
|
||||
if (mode != HASH_UPDATE_KEY_ANYWAY) {
|
||||
ulong h = zend_inline_hash_func(str_index, str_length);
|
||||
Bucket *q = ht->arBuckets[h & ht->nTableMask];
|
||||
int found = 0;
|
||||
|
||||
while (q != NULL) {
|
||||
if (q->h == h && q->nKeyLength == str_length &&
|
||||
memcmp(q->arKey, str_index, str_length) == 0) {
|
||||
break;
|
||||
while (q != NULL) {
|
||||
if (q == p) {
|
||||
found = 1;
|
||||
} else if (q->h == h && q->nKeyLength == str_length &&
|
||||
memcmp(q->arKey, str_index, str_length) == 0) {
|
||||
if (found) {
|
||||
if (mode & HASH_UPDATE_KEY_IF_BEFORE) {
|
||||
break;
|
||||
} else {
|
||||
if (p->nKeyLength) {
|
||||
zend_hash_del(ht, p->arKey, p->nKeyLength);
|
||||
} else {
|
||||
zend_hash_index_del(ht, p->h);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
} else {
|
||||
if (mode & HASH_UPDATE_KEY_IF_AFTER) {
|
||||
break;
|
||||
} else {
|
||||
if (p->nKeyLength) {
|
||||
zend_hash_del(ht, p->arKey, p->nKeyLength);
|
||||
} else {
|
||||
zend_hash_index_del(ht, p->h);
|
||||
}
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
}
|
||||
q = q->pNext;
|
||||
}
|
||||
q = q->pNext;
|
||||
}
|
||||
|
||||
zend_hash_del(ht, str_index, str_length);
|
||||
} else {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
HANDLE_BLOCK_INTERRUPTIONS();
|
||||
|
||||
if (q) {
|
||||
if (mode != HASH_UPDATE_KEY_ANYWAY) {
|
||||
Bucket *r = p->pListLast;
|
||||
int found = HASH_UPDATE_KEY_IF_BEFORE;
|
||||
|
||||
while (r) {
|
||||
if (r == q) {
|
||||
found = HASH_UPDATE_KEY_IF_AFTER;
|
||||
break;
|
||||
}
|
||||
r = r->pListLast;
|
||||
}
|
||||
if (mode & found) {
|
||||
/* delete current bucket */
|
||||
if (p == ht->arBuckets[p->h & ht->nTableMask]) {
|
||||
ht->arBuckets[p->h & ht->nTableMask] = p->pNext;
|
||||
} else {
|
||||
p->pLast->pNext = p->pNext;
|
||||
}
|
||||
if (p->pNext) {
|
||||
p->pNext->pLast = p->pLast;
|
||||
}
|
||||
if (p->pListLast != NULL) {
|
||||
p->pListLast->pListNext = p->pListNext;
|
||||
} else {
|
||||
/* Deleting the head of the list */
|
||||
ht->pListHead = p->pListNext;
|
||||
}
|
||||
if (p->pListNext != NULL) {
|
||||
p->pListNext->pListLast = p->pListLast;
|
||||
} else {
|
||||
ht->pListTail = p->pListLast;
|
||||
}
|
||||
if (ht->pInternalPointer == p) {
|
||||
ht->pInternalPointer = p->pListNext;
|
||||
}
|
||||
if (ht->pDestructor) {
|
||||
ht->pDestructor(p->pData);
|
||||
}
|
||||
if (p->pData != &p->pDataPtr) {
|
||||
pefree(p->pData, ht->persistent);
|
||||
}
|
||||
pefree(p, ht->persistent);
|
||||
ht->nNumOfElements--;
|
||||
HANDLE_UNBLOCK_INTERRUPTIONS();
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
/* delete another bucket with the same key */
|
||||
if (q == ht->arBuckets[q->h & ht->nTableMask]) {
|
||||
ht->arBuckets[q->h & ht->nTableMask] = q->pNext;
|
||||
} else {
|
||||
q->pLast->pNext = q->pNext;
|
||||
}
|
||||
if (q->pNext) {
|
||||
q->pNext->pLast = q->pLast;
|
||||
}
|
||||
if (q->pListLast != NULL) {
|
||||
q->pListLast->pListNext = q->pListNext;
|
||||
} else {
|
||||
/* Deleting the head of the list */
|
||||
ht->pListHead = q->pListNext;
|
||||
}
|
||||
if (q->pListNext != NULL) {
|
||||
q->pListNext->pListLast = q->pListLast;
|
||||
} else {
|
||||
ht->pListTail = q->pListLast;
|
||||
}
|
||||
if (ht->pInternalPointer == q) {
|
||||
ht->pInternalPointer = q->pListNext;
|
||||
}
|
||||
if (ht->pDestructor) {
|
||||
ht->pDestructor(q->pData);
|
||||
}
|
||||
if (q->pData != &q->pDataPtr) {
|
||||
pefree(q->pData, ht->persistent);
|
||||
}
|
||||
pefree(q, ht->persistent);
|
||||
ht->nNumOfElements--;
|
||||
}
|
||||
|
||||
if (p->pNext) {
|
||||
p->pNext->pLast = p->pLast;
|
||||
}
|
||||
if (p->pLast) {
|
||||
p->pLast->pNext = p->pNext;
|
||||
} else {
|
||||
} else{
|
||||
ht->arBuckets[p->h & ht->nTableMask] = p->pNext;
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
+1
-1
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
+----------------------------------------------------------------------+
|
||||
| Zend Engine |
|
||||
+----------------------------------------------------------------------+
|
||||
| Copyright (c) 1998-2011 Zend Technologies Ltd. (http://www.zend.com) |
|
||||
| Copyright (c) 1998-2010 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 |
|
||||
@@ -211,7 +211,7 @@ inner_statement:
|
||||
|
||||
|
||||
statement:
|
||||
unticked_statement { DO_TICKS(); }
|
||||
unticked_statement { zend_do_ticks(TSRMLS_C); }
|
||||
| T_STRING ':' { zend_do_label(&$1 TSRMLS_CC); }
|
||||
;
|
||||
|
||||
@@ -291,11 +291,11 @@ unset_variable:
|
||||
;
|
||||
|
||||
function_declaration_statement:
|
||||
unticked_function_declaration_statement { DO_TICKS(); }
|
||||
unticked_function_declaration_statement { zend_do_ticks(TSRMLS_C); }
|
||||
;
|
||||
|
||||
class_declaration_statement:
|
||||
unticked_class_declaration_statement { DO_TICKS(); }
|
||||
unticked_class_declaration_statement { zend_do_ticks(TSRMLS_C); }
|
||||
;
|
||||
|
||||
|
||||
|
||||
Loaded 100 of 1602 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user