mirror of
https://github.com/php/php-src.git
synced 2024-12-12 03:15:29 +08:00
137 lines
5.3 KiB
Plaintext
137 lines
5.3 KiB
Plaintext
$Id$
|
|
|
|
UPGRADE NOTES - PHP X.Y
|
|
|
|
1. Internal API changes
|
|
a. Executor changes
|
|
b. Streams pooling API
|
|
c. Lowercasing and locales
|
|
d. zend_qsort_r
|
|
e. get_current_key
|
|
f. unserialization of manipulated object strings
|
|
|
|
2. Build system changes
|
|
a. Unix build system changes
|
|
b. Windows build system changes
|
|
|
|
|
|
========================
|
|
1. Internal API changes
|
|
========================
|
|
|
|
a. Executor changes
|
|
|
|
* extensions can't override zend_execute() any more, they should override
|
|
zend_execute_ex() instead. The EG(current_execute_data) is already
|
|
initialized in zend_execute_ex(), so for compatibility extensions
|
|
may need to use EG(current_execute_data)->prev_execute_data instead.
|
|
* removed EG(arg_types_stack), EX(fbc), EX(called_scope), EX(current_object)
|
|
* added op_array->nested_calls. It's calculated at compile time.
|
|
* added EX(call_slots). It is an array to store information about syntaticaly
|
|
nested calls (e.g. foo(bar())). It's preallocated together with execute_data.
|
|
* added EX(call) - pointer to a current calling function. Actually an
|
|
element of EX(call_slots)
|
|
* opcodes INIT_METHOD_CALL, ZEND_INIT_STATIC_METHOD_CALL,
|
|
ZEND_INIT_FCALL_BY_NAME, ZEND_INIT_NS_FCALL_BY_NAME use result.num as
|
|
an index in EX(call_slots)
|
|
* opcode ZEND_NEW uses extended_vallue as an index in EX(call_slots)
|
|
* opcoes ZEND_DO_FCALL and ZEND_DO_FCALL_BY_NAME use op2.num as
|
|
an index in EX(call_slots)
|
|
* added op_array->used_stack. It's calculated at compile time and the
|
|
corresponding stack space is preallocated together with execute_data.
|
|
ZEND_SEND* and ZEND_DO_FCALL* don't need to check for stack overflow
|
|
anymore.
|
|
* Removed execute_data->Ts field. The VM temporary variables always allocated
|
|
immediately before execute_data structure. Now they are accessed by offset
|
|
from the execute_data base pointer (instead of execute_data->Ts). Compiler
|
|
stores new offsets in op_array->opcodes[*].op?.num. You can use macros
|
|
EX_TMP_VAR() and EX_TMP_VAR_NUM() to access temp_variable by offset or
|
|
number. You can convert number to offset using EX_TMP_VAR_NUM(0, num) or
|
|
offset to number (EX_TMP_VAR_NUM(0,0)-EX_TMP_VAR(0,offset)).
|
|
* Removed execute_data->CVs field. The VM compiled variables always allocated
|
|
immediately after execute_data structure. Now they are accessed by offset
|
|
from the execute_data base pointer (instead of execute_data->CVs). You can
|
|
use macros EX_CV_NUM() to access compiled variables by number.
|
|
|
|
b. Streams pooling API
|
|
|
|
The streams pooling API has been removed. The following functions no longer
|
|
exist:
|
|
|
|
PHPAPI int php_stream_context_get_link(php_stream_context *context,
|
|
const char *hostent, php_stream **stream);
|
|
PHPAPI int php_stream_context_set_link(php_stream_context *context,
|
|
const char *hostent, php_stream *stream);
|
|
PHPAPI int php_stream_context_del_link(php_stream_context *context,
|
|
php_stream *stream);
|
|
|
|
c. Lowercasing and locales
|
|
|
|
The lowercasing functions in zend_operators.c were split into those that do
|
|
lowercasing according to locale rules and those that do ASCII lowercasing.
|
|
ASCII:
|
|
|
|
zend_str_tolower_copy
|
|
zend_str_tolower_dup
|
|
zend_str_tolower
|
|
zend_binary_strcasecmp
|
|
zend_binary_strncasecmp
|
|
|
|
Locale-based:
|
|
zend_binary_strncasecmp_l
|
|
zend_binary_strcasecmp_l
|
|
zend_binary_zval_strcasecmp
|
|
zend_binary_zval_strncasecmp
|
|
string_compare_function_ex
|
|
string_case_compare_function
|
|
|
|
Internal engine lowercasing will be using ASCII-only rules. User-facing functions,
|
|
such as strcasecmp, will be using locale rules.
|
|
|
|
Two new functions - zend_binary_strncasecmp_l and zend_binary_strcasecmp_l - added as
|
|
locale-based counterparts to zend_binary_strcasecmp and zend_binary_strncasecmp.
|
|
|
|
d. zend_qsort_r
|
|
|
|
Added the function zend_qsort_r():
|
|
|
|
typedef int (*compare_r_func_t)(const void *, const void * TSRMLS_DC, void *);
|
|
void zend_qsort_r(void *base, size_t nmemb, size_t siz, compare_r_func_t compare, void *arg TSRMLS_DC);
|
|
|
|
The extra argument it has (relatively to zend_qsort()) is passed to the
|
|
comparison function.
|
|
|
|
e. get_current_key
|
|
|
|
The signature of the get_current_key iteration handler has been changed to:
|
|
|
|
void (*get_current_key)(zend_object_iterator *iter, zval *key TSRMLS_DC);
|
|
|
|
The key should be written into the zval* using the ZVAL_* macros.
|
|
|
|
f. unserialization of manipulated object strings
|
|
|
|
Strings requiring unserialization of objects are now explicitly checked
|
|
whether the object they contain implements the Serializable interface.
|
|
This solves the situation where manipulated strings could be passed for
|
|
objects using Serializable to disallow serialization. An object
|
|
implementing Serializable will always start with "C:" in the serialized
|
|
string, all other objects are represented with starting "O:". Objects
|
|
implementing Serializable to disable serialization using
|
|
zend_class_unserialize_deny and zend_class_serialize_deny, when
|
|
instantiated from the serializer with a manipulated "O:" string at the
|
|
start, will most likely be defectively initialized. This is now
|
|
fixed at the appropriate place by checking for the presence of the
|
|
serialize callback in the class entry.
|
|
|
|
========================
|
|
2. Build system changes
|
|
========================
|
|
|
|
a. Unix build system changes
|
|
-
|
|
|
|
b. Windows build system changes
|
|
- Drop Windows XP and 2003 support.
|
|
|