mirror of
https://github.com/php/php-src.git
synced 2026-04-06 23:53:30 +02:00
Merge branch 'phpng' of https://git.php.net/repository/php-src into phpng
This commit is contained in:
@@ -6406,6 +6406,7 @@ str_index:
|
||||
} else {
|
||||
GET_NODE(result, init_opline->result);
|
||||
}
|
||||
result->EA = 0;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
@@ -859,6 +859,7 @@ int zend_call_function(zend_fcall_info *fci, zend_fcall_info_cache *fci_cache TS
|
||||
EG(scope) = func->common.scope;
|
||||
}
|
||||
call->prev_execute_data = EG(current_execute_data);
|
||||
call->return_value = NULL; /* this is not a constructor call */
|
||||
EG(current_execute_data) = call;
|
||||
if (EXPECTED(zend_execute_internal == NULL)) {
|
||||
/* saves one function call if zend_execute_internal is not used */
|
||||
|
||||
@@ -3351,16 +3351,12 @@ ZEND_METHOD(reflection_class, __construct)
|
||||
/* {{{ add_class_vars */
|
||||
static void add_class_vars(zend_class_entry *ce, int statics, zval *return_value TSRMLS_DC)
|
||||
{
|
||||
HashPosition pos;
|
||||
zend_property_info *prop_info;
|
||||
zval *prop, prop_copy;
|
||||
zend_string *key;
|
||||
ulong num_index;
|
||||
|
||||
zend_hash_internal_pointer_reset_ex(&ce->properties_info, &pos);
|
||||
while ((prop_info = zend_hash_get_current_data_ptr_ex(&ce->properties_info, &pos)) != NULL) {
|
||||
zend_hash_get_current_key_ex(&ce->properties_info, &key, &num_index, 0, &pos);
|
||||
zend_hash_move_forward_ex(&ce->properties_info, &pos);
|
||||
ZEND_HASH_FOREACH_KEY_PTR(&ce->properties_info, num_index, key, prop_info) {
|
||||
if (((prop_info->flags & ZEND_ACC_SHADOW) &&
|
||||
prop_info->ce != ce) ||
|
||||
((prop_info->flags & ZEND_ACC_PROTECTED) &&
|
||||
@@ -3382,6 +3378,7 @@ static void add_class_vars(zend_class_entry *ce, int statics, zval *return_value
|
||||
}
|
||||
|
||||
/* copy: enforce read only access */
|
||||
ZVAL_DEREF(prop);
|
||||
ZVAL_DUP(&prop_copy, prop);
|
||||
|
||||
/* this is necessary to make it able to work with default array
|
||||
@@ -3391,7 +3388,7 @@ static void add_class_vars(zend_class_entry *ce, int statics, zval *return_value
|
||||
}
|
||||
|
||||
zend_hash_update(Z_ARRVAL_P(return_value), key, &prop_copy);
|
||||
}
|
||||
} ZEND_HASH_FOREACH_END();
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
17
main/main.c
17
main/main.c
@@ -1192,10 +1192,19 @@ static void php_error_cb(int type, const char *error_filename, const uint error_
|
||||
case E_USER_ERROR:
|
||||
{ /* new block to allow variable definition */
|
||||
/* eval() errors do not affect exit_status or response code */
|
||||
zend_bool during_eval = (type == E_PARSE) && (EG(current_execute_data) &&
|
||||
EG(current_execute_data)->opline &&
|
||||
EG(current_execute_data)->opline->opcode == ZEND_INCLUDE_OR_EVAL &&
|
||||
EG(current_execute_data)->opline->extended_value == ZEND_EVAL);
|
||||
zend_bool during_eval = 0;
|
||||
|
||||
if (type == E_PARSE) {
|
||||
zend_execute_data *execute_data = EG(current_execute_data);
|
||||
|
||||
while (execute_data && (!execute_data->func || !ZEND_USER_CODE(execute_data->func->common.type))) {
|
||||
execute_data = execute_data->prev_execute_data;
|
||||
}
|
||||
|
||||
during_eval = (execute_data &&
|
||||
execute_data->opline->opcode == ZEND_INCLUDE_OR_EVAL &&
|
||||
execute_data->opline->extended_value == ZEND_EVAL);
|
||||
}
|
||||
if (!during_eval) {
|
||||
EG(exit_status) = 255;
|
||||
}
|
||||
|
||||
@@ -202,9 +202,7 @@ struct _php_stream {
|
||||
* PHP_STREAM_FCLOSE_XXX as appropriate */
|
||||
int fclose_stdiocast;
|
||||
FILE *stdiocast; /* cache this, otherwise we might leak! */
|
||||
#if ZEND_DEBUG
|
||||
int __exposed; /* non-zero if exposed as a zval somewhere */
|
||||
#endif
|
||||
char *orig_path;
|
||||
|
||||
php_stream_context *context;
|
||||
@@ -243,17 +241,12 @@ END_EXTERN_C()
|
||||
#define php_stream_alloc(ops, thisptr, persistent_id, mode) _php_stream_alloc((ops), (thisptr), (persistent_id), (mode) STREAMS_CC TSRMLS_CC)
|
||||
|
||||
#define php_stream_get_resource_id(stream) ((php_stream *)(stream))->res->handle
|
||||
#if ZEND_DEBUG
|
||||
/* use this to tell the stream that it is OK if we don't explicitly close it */
|
||||
# define php_stream_auto_cleanup(stream) { (stream)->__exposed++; }
|
||||
#define php_stream_auto_cleanup(stream) { (stream)->__exposed++; }
|
||||
/* use this to assign the stream to a zval and tell the stream that is
|
||||
* has been exported to the engine; it will expect to be closed automatically
|
||||
* when the resources are auto-destructed */
|
||||
# define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); (stream)->__exposed++; }
|
||||
#else
|
||||
# define php_stream_auto_cleanup(stream) /* nothing */
|
||||
# define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); }
|
||||
#endif
|
||||
#define php_stream_to_zval(stream, zval) { ZVAL_RES(zval, (stream)->res); (stream)->__exposed++; }
|
||||
|
||||
#define php_stream_from_zval(xstr, pzval) ZEND_FETCH_RESOURCE2((xstr), php_stream *, (pzval), -1, "stream", php_file_le_stream(), php_file_le_pstream())
|
||||
#define php_stream_from_zval_no_verify(xstr, pzval) (xstr) = (php_stream*)zend_fetch_resource((pzval) TSRMLS_CC, -1, "stream", NULL, 2, php_file_le_stream(), php_file_le_pstream())
|
||||
|
||||
@@ -466,6 +466,10 @@ fprintf(stderr, "stream_free: %s:%p[%s] preserve_handle=%d release_cast=%d remov
|
||||
//??? while (zend_list_delete(stream->res) == SUCCESS) {}
|
||||
//??? stream->res->gc.refcount = 0;
|
||||
zend_list_close(stream->res);
|
||||
if (!stream->__exposed) {
|
||||
zend_list_delete(stream->res);
|
||||
stream->res = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
if (close_options & PHP_STREAM_FREE_CALL_DTOR) {
|
||||
|
||||
Reference in New Issue
Block a user