From 322864b569471811bb22a3363e21719f38a69708 Mon Sep 17 00:00:00 2001 From: Joe Watkins Date: Tue, 20 Jul 2021 12:36:20 +0200 Subject: [PATCH] Drop serial denier functions --- UPGRADING.INTERNALS | 3 +-- Zend/zend_interfaces.c | 17 ----------------- Zend/zend_interfaces.h | 3 --- Zend/zend_interfaces.stub.php | 3 +++ Zend/zend_interfaces_arginfo.h | 4 ++-- 5 files changed, 6 insertions(+), 24 deletions(-) diff --git a/UPGRADING.INTERNALS b/UPGRADING.INTERNALS index bfe63fb2d03..32585fbfcb5 100644 --- a/UPGRADING.INTERNALS +++ b/UPGRADING.INTERNALS @@ -49,8 +49,7 @@ PHP 8.1 INTERNALS UPGRADE NOTES macro. Replace ZEND_ATOL(i, s) with i = ZEND_ATOL(s). f. Non-serializable classes should be indicated using the ZEND_ACC_NOT_SERIALIZABLE (@not-serializable in stubs) rather than the - zend_class_(un)serialize_deny handlers. Support for the serialization - handlers will be dropped in the future. + zend_class_(un)serialize_deny handlers which are removed. ======================== 2. Build system changes diff --git a/Zend/zend_interfaces.c b/Zend/zend_interfaces.c index fac358edb2b..9894617d60c 100644 --- a/Zend/zend_interfaces.c +++ b/Zend/zend_interfaces.c @@ -403,21 +403,6 @@ ZEND_API int zend_user_unserialize(zval *object, zend_class_entry *ce, const uns } /* }}} */ -ZEND_API int zend_class_serialize_deny(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data) /* {{{ */ -{ - zend_class_entry *ce = Z_OBJCE_P(object); - zend_throw_exception_ex(NULL, 0, "Serialization of '%s' is not allowed", ZSTR_VAL(ce->name)); - return FAILURE; -} -/* }}} */ - -ZEND_API int zend_class_unserialize_deny(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data) /* {{{ */ -{ - zend_throw_exception_ex(NULL, 0, "Unserialization of '%s' is not allowed", ZSTR_VAL(ce->name)); - return FAILURE; -} -/* }}} */ - /* {{{ zend_implement_serializable */ static int zend_implement_serializable(zend_class_entry *interface, zend_class_entry *class_type) { @@ -623,8 +608,6 @@ ZEND_API void zend_register_interfaces(void) zend_ce_internal_iterator = register_class_InternalIterator(zend_ce_iterator); zend_ce_internal_iterator->create_object = zend_internal_iterator_create; - zend_ce_internal_iterator->serialize = zend_class_serialize_deny; - zend_ce_internal_iterator->unserialize = zend_class_unserialize_deny; memcpy(&zend_internal_iterator_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); diff --git a/Zend/zend_interfaces.h b/Zend/zend_interfaces.h index 78aee0d39fc..2799e2c4381 100644 --- a/Zend/zend_interfaces.h +++ b/Zend/zend_interfaces.h @@ -64,9 +64,6 @@ ZEND_API void zend_register_interfaces(void); ZEND_API int zend_user_serialize(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data); ZEND_API int zend_user_unserialize(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data); -ZEND_API int zend_class_serialize_deny(zval *object, unsigned char **buffer, size_t *buf_len, zend_serialize_data *data); -ZEND_API int zend_class_unserialize_deny(zval *object, zend_class_entry *ce, const unsigned char *buf, size_t buf_len, zend_unserialize_data *data); - ZEND_API zend_result zend_create_internal_iterator_zval(zval *return_value, zval *obj); END_EXTERN_C() diff --git a/Zend/zend_interfaces.stub.php b/Zend/zend_interfaces.stub.php index 0b58c94049f..2247205e469 100644 --- a/Zend/zend_interfaces.stub.php +++ b/Zend/zend_interfaces.stub.php @@ -66,6 +66,9 @@ interface Stringable public function __toString(): string; } +/** + * @not-serializable + */ final class InternalIterator implements Iterator { private function __construct() {} diff --git a/Zend/zend_interfaces_arginfo.h b/Zend/zend_interfaces_arginfo.h index 69c3853af72..8937d67ede0 100644 --- a/Zend/zend_interfaces_arginfo.h +++ b/Zend/zend_interfaces_arginfo.h @@ -1,5 +1,5 @@ /* This is a generated file, edit the .stub.php file instead. - * Stub hash: 339e326a82a7fd1e2ae419c8c86095e29028fbd6 */ + * Stub hash: a9c915c11e5989d8c7cf2d704ada09ca765670c3 */ ZEND_BEGIN_ARG_WITH_TENTATIVE_RETURN_OBJ_INFO_EX(arginfo_class_IteratorAggregate_getIterator, 0, 0, Traversable, 0) ZEND_END_ARG_INFO() @@ -208,7 +208,7 @@ static zend_class_entry *register_class_InternalIterator(zend_class_entry *class INIT_CLASS_ENTRY(ce, "InternalIterator", class_InternalIterator_methods); class_entry = zend_register_internal_class_ex(&ce, NULL); - class_entry->ce_flags |= ZEND_ACC_FINAL; + class_entry->ce_flags |= ZEND_ACC_FINAL|ZEND_ACC_NOT_SERIALIZABLE; zend_class_implements(class_entry, 1, class_entry_Iterator); return class_entry;