arg_replace_fci.param_count = 1;
arg_replace_fci.params = args;
- arg_replace_fci.retval_ptr_ptr = &retval_ptr;
- if (zend_call_function(&arg_replace_fci, &arg_replace_fci_cache TSRMLS_CC) == SUCCESS && arg_replace_fci.retval_ptr_ptr && retval_ptr) {
- convert_to_string_ex(&retval_ptr);
- smart_str_appendl(&out_buf, Z_STRVAL_P(retval_ptr), Z_STRLEN_P(retval_ptr));
- eval_buf.len = 0;
- zval_ptr_dtor(&retval_ptr);
+ arg_replace_fci.retval = &retval;
+ if (zend_call_function(&arg_replace_fci, &arg_replace_fci_cache) == SUCCESS &&
+ !Z_ISUNDEF(retval)) {
+ convert_to_string_ex(&retval);
+ smart_str_appendl(&out_buf, Z_STRVAL(retval), Z_STRLEN(retval));
+ smart_str_free(&eval_buf);
+ zval_ptr_dtor(&retval);
} else {
- efree(description);
if (!EG(exception)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to call custom replacement function");
+ php_error_docref(NULL, E_WARNING, "Unable to call custom replacement function");
}
}
zval_ptr_dtor(&subpats);
/* Check blocksize */
if (mcrypt_enc_is_block_mode(pm->td) == 1) { /* It's a block algorithm */
block_size = mcrypt_enc_get_block_size(pm->td);
- data_size = (((data_len - 1) / block_size) + 1) * block_size;
+ data_size = ((((int)data_len - 1) / block_size) + 1) * block_size;
+ if (data_size <= 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Integer overflow in data size");
+ RETURN_FALSE;
+ }
- data_s = emalloc(data_size + 1);
- memset(data_s, 0, data_size);
- memcpy(data_s, data, data_len);
+ data_str = zend_string_alloc(data_size, 0);
+ memset(ZSTR_VAL(data_str), 0, data_size);
+ memcpy(ZSTR_VAL(data_str), data, data_len);
} else { /* It's not a block algorithm */
- data_size = data_len;
- data_s = emalloc(data_size + 1);
- memset(data_s, 0, data_size);
- memcpy(data_s, data, data_len);
+ data_size = (int)data_len;
+ data_str = zend_string_alloc(data_size, 0);
+ memset(ZSTR_VAL(data_str), 0, data_size);
+ memcpy(ZSTR_VAL(data_str), data, data_len);
}
- mcrypt_generic(pm->td, data_s, data_size);
- data_s[data_size] = '\0';
+ mcrypt_generic(pm->td, ZSTR_VAL(data_str), data_size);
+ ZSTR_VAL(data_str)[data_size] = '\0';
- RETVAL_STRINGL(data_s, data_size, 1);
- efree(data_s);
+ RETVAL_NEW_STR(data_str);
}
/* }}} */
/* Check blocksize */
if (mcrypt_enc_is_block_mode(pm->td) == 1) { /* It's a block algorithm */
block_size = mcrypt_enc_get_block_size(pm->td);
- data_size = (((data_len - 1) / block_size) + 1) * block_size;
+ data_size = ((((int)data_len - 1) / block_size) + 1) * block_size;
- data_s = emalloc(data_size + 1);
+ if (data_size <= 0) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Integer overflow in data size");
+ RETURN_FALSE;
+ }
- data_s = emalloc(data_size + 1);
++ data_s = emalloc((size_t)data_size + 1);
memset(data_s, 0, data_size);
memcpy(data_s, data, data_len);
} else { /* It's not a block algorithm */
}
/* }}} */
-static HashTable *php_zip_get_gc(zval *object, zval ***gc_data, int *gc_data_count TSRMLS_DC) /* {{{ */
++static HashTable *php_zip_get_gc(zval *object, zval **gc_data, int *gc_data_count) /* {{{ */
+ {
+ *gc_data = NULL;
+ *gc_data_count = 0;
- return zend_std_get_properties(object TSRMLS_CC);
++ return zend_std_get_properties(object);
+ }
+ /* }}} */
+
-static HashTable *php_zip_get_properties(zval *object TSRMLS_DC)/* {{{ */
+static HashTable *php_zip_get_properties(zval *object)/* {{{ */
{
ze_zip_object *obj;
- zip_prop_handler *hnd;
HashTable *props;
- zval *val;
- int ret;
- char *key;
- uint key_len;
- HashPosition pos;
- ulong num_key;
+ zip_prop_handler *hnd;
+ zend_string *key;
- obj = (ze_zip_object *)zend_objects_get_address(object TSRMLS_CC);
- props = zend_std_get_properties(object TSRMLS_CC);
+ obj = Z_ZIP_P(object);
+ props = zend_std_get_properties(object);
if (obj->prop_handler == NULL) {
return NULL;
zend_class_entry ce;
memcpy(&zip_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
- zip_object_handlers.clone_obj = NULL;
+ zip_object_handlers.offset = XtOffsetOf(ze_zip_object, zo);
+ zip_object_handlers.free_obj = php_zip_object_free_storage;
+ zip_object_handlers.clone_obj = NULL;
zip_object_handlers.get_property_ptr_ptr = php_zip_get_property_ptr_ptr;
+ zip_object_handlers.get_gc = php_zip_get_gc;
zip_object_handlers.get_properties = php_zip_get_properties;
zip_object_handlers.read_property = php_zip_read_property;
zip_object_handlers.has_property = php_zip_has_property;