@@ -101,10 +101,11 @@ static int zend_file_cache_flock(int fd, int type)
101
101
#define IS_SERIALIZED (ptr ) \
102
102
((char*)(ptr) <= (char*)script->size)
103
103
#define IS_UNSERIALIZED (ptr ) \
104
- ((char*)(ptr) >= (char*)script->mem && (char*)(ptr) < (char*)script->mem + script->size)
104
+ (((char*)(ptr) >= (char*)script->mem && (char*)(ptr) < (char*)script->mem + script->size) || \
105
+ IS_ACCEL_INTERNED(ptr))
105
106
#define SERIALIZE_PTR (ptr ) do { \
106
107
if (ptr) { \
107
- ZEND_ASSERT(IS_UNSERIALIZED(ptr) || IS_ACCEL_INTERNED(ptr) ); \
108
+ ZEND_ASSERT(IS_UNSERIALIZED(ptr)); \
108
109
(ptr) = (void*)((char*)(ptr) - (char*)script->mem); \
109
110
} \
110
111
} while (0)
@@ -960,12 +961,12 @@ static void zend_file_cache_unserialize_zval(zval *zv,
960
961
switch (Z_TYPE_P (zv )) {
961
962
case IS_STRING :
962
963
case IS_CONSTANT :
963
- if (IS_SERIALIZED (Z_STR_P (zv ))) {
964
+ if (! IS_UNSERIALIZED (Z_STR_P (zv ))) {
964
965
UNSERIALIZE_STR (Z_STR_P (zv ));
965
966
}
966
967
break ;
967
968
case IS_ARRAY :
968
- if (IS_SERIALIZED (Z_ARR_P (zv ))) {
969
+ if (! IS_UNSERIALIZED (Z_ARR_P (zv ))) {
969
970
HashTable * ht ;
970
971
971
972
UNSERIALIZE_PTR (Z_ARR_P (zv ));
@@ -975,7 +976,7 @@ static void zend_file_cache_unserialize_zval(zval *zv,
975
976
}
976
977
break ;
977
978
case IS_REFERENCE :
978
- if (IS_SERIALIZED (Z_REF_P (zv ))) {
979
+ if (! IS_UNSERIALIZED (Z_REF_P (zv ))) {
979
980
zend_reference * ref ;
980
981
981
982
UNSERIALIZE_PTR (Z_REF_P (zv ));
@@ -984,12 +985,12 @@ static void zend_file_cache_unserialize_zval(zval *zv,
984
985
}
985
986
break ;
986
987
case IS_CONSTANT_AST :
987
- if (IS_SERIALIZED (Z_AST_P (zv ))) {
988
+ if (! IS_UNSERIALIZED (Z_AST_P (zv ))) {
988
989
zend_ast_ref * ast ;
989
990
990
991
UNSERIALIZE_PTR (Z_AST_P (zv ));
991
992
ast = Z_AST_P (zv );
992
- if (IS_SERIALIZED (ast -> ast )) {
993
+ if (! IS_UNSERIALIZED (ast -> ast )) {
993
994
ast -> ast = zend_file_cache_unserialize_ast (ast -> ast , script , buf );
994
995
}
995
996
}
@@ -1001,7 +1002,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
1001
1002
zend_persistent_script * script ,
1002
1003
void * buf )
1003
1004
{
1004
- if (op_array -> static_variables && IS_SERIALIZED (op_array -> static_variables )) {
1005
+ if (op_array -> static_variables && ! IS_UNSERIALIZED (op_array -> static_variables )) {
1005
1006
HashTable * ht ;
1006
1007
1007
1008
UNSERIALIZE_PTR (op_array -> static_variables );
@@ -1026,7 +1027,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
1026
1027
return ;
1027
1028
}
1028
1029
1029
- if (op_array -> literals && IS_SERIALIZED (op_array -> literals )) {
1030
+ if (op_array -> literals && ! IS_UNSERIALIZED (op_array -> literals )) {
1030
1031
zval * p , * end ;
1031
1032
1032
1033
UNSERIALIZE_PTR (op_array -> literals );
@@ -1038,7 +1039,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
1038
1039
}
1039
1040
}
1040
1041
1041
- if (IS_SERIALIZED (op_array -> opcodes )) {
1042
+ if (! IS_UNSERIALIZED (op_array -> opcodes )) {
1042
1043
zend_op * opline , * end ;
1043
1044
1044
1045
UNSERIALIZE_PTR (op_array -> opcodes );
@@ -1099,7 +1100,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
1099
1100
end ++ ;
1100
1101
}
1101
1102
while (p < end ) {
1102
- if (IS_SERIALIZED (p -> name )) {
1103
+ if (! IS_UNSERIALIZED (p -> name )) {
1103
1104
UNSERIALIZE_STR (p -> name );
1104
1105
}
1105
1106
if (p -> type & (Z_UL (1 ) << (sizeof (zend_type )* 8 - 1 ))) { /* type is class */
@@ -1120,7 +1121,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr
1120
1121
p = op_array -> vars ;
1121
1122
end = p + op_array -> last_var ;
1122
1123
while (p < end ) {
1123
- if (IS_SERIALIZED (* p )) {
1124
+ if (! IS_UNSERIALIZED (* p )) {
1124
1125
UNSERIALIZE_STR (* p );
1125
1126
}
1126
1127
p ++ ;
@@ -1152,19 +1153,19 @@ static void zend_file_cache_unserialize_prop_info(zval *zv,
1152
1153
zend_persistent_script * script ,
1153
1154
void * buf )
1154
1155
{
1155
- if (IS_SERIALIZED (Z_PTR_P (zv ))) {
1156
+ if (! IS_UNSERIALIZED (Z_PTR_P (zv ))) {
1156
1157
zend_property_info * prop ;
1157
1158
1158
1159
UNSERIALIZE_PTR (Z_PTR_P (zv ));
1159
1160
prop = Z_PTR_P (zv );
1160
1161
1161
- if (prop -> ce && IS_SERIALIZED (prop -> ce )) {
1162
+ if (prop -> ce && ! IS_UNSERIALIZED (prop -> ce )) {
1162
1163
UNSERIALIZE_PTR (prop -> ce );
1163
1164
}
1164
- if (prop -> name && IS_SERIALIZED (prop -> name )) {
1165
+ if (prop -> name && ! IS_UNSERIALIZED (prop -> name )) {
1165
1166
UNSERIALIZE_STR (prop -> name );
1166
1167
}
1167
- if (prop -> doc_comment && IS_SERIALIZED (prop -> doc_comment )) {
1168
+ if (prop -> doc_comment && ! IS_UNSERIALIZED (prop -> doc_comment )) {
1168
1169
UNSERIALIZE_STR (prop -> doc_comment );
1169
1170
}
1170
1171
}
@@ -1174,17 +1175,17 @@ static void zend_file_cache_unserialize_class_constant(zval *
1174
1175
zend_persistent_script * script ,
1175
1176
void * buf )
1176
1177
{
1177
- if (IS_SERIALIZED (Z_PTR_P (zv ))) {
1178
+ if (! IS_UNSERIALIZED (Z_PTR_P (zv ))) {
1178
1179
zend_class_constant * c ;
1179
1180
1180
1181
UNSERIALIZE_PTR (Z_PTR_P (zv ));
1181
1182
c = Z_PTR_P (zv );
1182
1183
1183
1184
zend_file_cache_unserialize_zval (& c -> value , script , buf );
1184
- if (c -> ce && IS_SERIALIZED (c -> ce )) {
1185
+ if (c -> ce && ! IS_UNSERIALIZED (c -> ce )) {
1185
1186
UNSERIALIZE_PTR (c -> ce );
1186
1187
}
1187
- if (c -> doc_comment && IS_SERIALIZED (c -> doc_comment )) {
1188
+ if (c -> doc_comment && ! IS_UNSERIALIZED (c -> doc_comment )) {
1188
1189
UNSERIALIZE_STR (c -> doc_comment );
1189
1190
}
1190
1191
}
0 commit comments