1
0
mirror of https://github.com/php/php-src.git synced 2026-04-08 08:33:06 +02:00

Fixed file-cache support (serialization/deserialization of zend_type)

This commit is contained in:
Dmitry Stogov
2017-03-03 12:26:49 +03:00
parent 927d2d3608
commit 9276eb613c

View File

@@ -437,14 +437,14 @@ static void zend_file_cache_serialize_op_array(zend_op_array *op_arra
SERIALIZE_STR(p->name);
}
if (ZEND_TYPE_IS_CLASS(p->type)) {
zend_bool allow_null = ZEND_TYPE_ALLOW_NULL(p->type);
zend_string *type_name = ZEND_TYPE_NAME(p->type);
if (!IS_SERIALIZED(type_name)) {
zend_bool allow_null = ZEND_TYPE_ALLOW_NULL(p->type);
SERIALIZE_STR(type_name);
p->type = ZEND_TYPE_ENCODE_CLASS(type_name, allow_null);
}
SERIALIZE_STR(type_name);
p->type =
(Z_UL(1) << (sizeof(zend_type)*8-1)) | /* type is class */
(allow_null ? (Z_UL(1) << (sizeof(zend_type)*8-2)) : Z_UL(0)) | /* type allow null */
(zend_type)type_name;
}
p++;
}
@@ -1018,15 +1018,12 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
if (!IS_UNSERIALIZED(p->name)) {
UNSERIALIZE_STR(p->name);
}
if (ZEND_TYPE_IS_CLASS(p->type)) {
zend_string *type_name = ZEND_TYPE_NAME(p->type);
if (p->type & (Z_UL(1) << (sizeof(zend_type)*8-1))) { /* type is class */
zend_bool allow_null = (p->type & (Z_UL(1) << (sizeof(zend_type)*8-2))) != 0; /* type allow null */
zend_string *type_name = (zend_string*)(p->type & ~(((Z_UL(1) << (sizeof(zend_type)*8-1))) | ((Z_UL(1) << (sizeof(zend_type)*8-2)))));
if (!IS_UNSERIALIZED(type_name)) {
zend_bool allow_null = ZEND_TYPE_ALLOW_NULL(p->type);
UNSERIALIZE_STR(type_name);
p->type = ZEND_TYPE_ENCODE_CLASS(type_name, allow_null);
}
UNSERIALIZE_STR(type_name);
p->type = ZEND_TYPE_ENCODE_CLASS(type_name, allow_null);
}
p++;
}