diff options
author | Dmitry Stogov <dmitry@zend.com> | 2018-04-28 00:28:01 +0300 |
---|---|---|
committer | Dmitry Stogov <dmitry@zend.com> | 2018-04-28 00:28:01 +0300 |
commit | f75b8a44cc078045b4e4a0a7dfe7e3ad3a8176e0 (patch) | |
tree | 82cdcb53b840ac272f4077d8731f9e5c440a0e69 | |
parent | aeb734910ae396d87989005edcc956e8fcb4253c (diff) | |
parent | c547c1b980468c6d5fd6e1a15606c858ffff36bf (diff) | |
download | php-git-f75b8a44cc078045b4e4a0a7dfe7e3ad3a8176e0.tar.gz |
Merge branch 'PHP-7.2'
* PHP-7.2:
Fixed bug #76205 (PHP-FPM sporadic crash when running Infinitewp).
-rw-r--r-- | ext/opcache/zend_file_cache.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/ext/opcache/zend_file_cache.c b/ext/opcache/zend_file_cache.c index 6f6b05c45c..42dfb7340f 100644 --- a/ext/opcache/zend_file_cache.c +++ b/ext/opcache/zend_file_cache.c @@ -101,11 +101,10 @@ static int zend_file_cache_flock(int fd, int type) #define IS_SERIALIZED(ptr) \ ((char*)(ptr) <= (char*)script->size) #define IS_UNSERIALIZED(ptr) \ - (((char*)(ptr) >= (char*)script->mem && (char*)(ptr) < (char*)script->mem + script->size) || \ - IS_ACCEL_INTERNED(ptr)) + ((char*)(ptr) >= (char*)script->mem && (char*)(ptr) < (char*)script->mem + script->size) #define SERIALIZE_PTR(ptr) do { \ if (ptr) { \ - ZEND_ASSERT(IS_UNSERIALIZED(ptr)); \ + ZEND_ASSERT(IS_UNSERIALIZED(ptr) || IS_ACCEL_INTERNED(ptr)); \ (ptr) = (void*)((char*)(ptr) - (char*)script->mem); \ } \ } while (0) @@ -952,7 +951,7 @@ static void zend_file_cache_unserialize_ast(zend_ast *ast, } else if (zend_ast_is_list(ast)) { zend_ast_list *list = zend_ast_get_list(ast); for (i = 0; i < list->children; i++) { - if (list->child[i] && !IS_UNSERIALIZED(list->child[i])) { + if (list->child[i] && IS_SERIALIZED(list->child[i])) { UNSERIALIZE_PTR(list->child[i]); zend_file_cache_unserialize_ast(list->child[i], script, buf); } @@ -960,7 +959,7 @@ static void zend_file_cache_unserialize_ast(zend_ast *ast, } else { uint32_t children = zend_ast_get_num_children(ast); for (i = 0; i < children; i++) { - if (ast->child[i] && !IS_UNSERIALIZED(ast->child[i])) { + if (ast->child[i] && IS_SERIALIZED(ast->child[i])) { UNSERIALIZE_PTR(ast->child[i]); zend_file_cache_unserialize_ast(ast->child[i], script, buf); } @@ -974,12 +973,12 @@ static void zend_file_cache_unserialize_zval(zval *zv, { switch (Z_TYPE_P(zv)) { case IS_STRING: - if (!IS_UNSERIALIZED(Z_STR_P(zv))) { + if (IS_SERIALIZED(Z_STR_P(zv))) { UNSERIALIZE_STR(Z_STR_P(zv)); } break; case IS_ARRAY: - if (!IS_UNSERIALIZED(Z_ARR_P(zv))) { + if (IS_SERIALIZED(Z_ARR_P(zv))) { HashTable *ht; UNSERIALIZE_PTR(Z_ARR_P(zv)); @@ -989,7 +988,7 @@ static void zend_file_cache_unserialize_zval(zval *zv, } break; case IS_REFERENCE: - if (!IS_UNSERIALIZED(Z_REF_P(zv))) { + if (IS_SERIALIZED(Z_REF_P(zv))) { zend_reference *ref; UNSERIALIZE_PTR(Z_REF_P(zv)); @@ -998,7 +997,7 @@ static void zend_file_cache_unserialize_zval(zval *zv, } break; case IS_CONSTANT_AST: - if (!IS_UNSERIALIZED(Z_AST_P(zv))) { + if (IS_SERIALIZED(Z_AST_P(zv))) { UNSERIALIZE_PTR(Z_AST_P(zv)); zend_file_cache_unserialize_ast(Z_ASTVAL_P(zv), script, buf); } @@ -1010,7 +1009,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr zend_persistent_script *script, void *buf) { - if (op_array->static_variables && !IS_UNSERIALIZED(op_array->static_variables)) { + if (op_array->static_variables && IS_SERIALIZED(op_array->static_variables)) { HashTable *ht; UNSERIALIZE_PTR(op_array->static_variables); @@ -1035,7 +1034,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr return; } - if (op_array->literals && !IS_UNSERIALIZED(op_array->literals)) { + if (op_array->literals && IS_SERIALIZED(op_array->literals)) { zval *p, *end; UNSERIALIZE_PTR(op_array->literals); @@ -1047,7 +1046,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr } } - if (!IS_UNSERIALIZED(op_array->opcodes)) { + if (IS_SERIALIZED(op_array->opcodes)) { zend_op *opline, *end; UNSERIALIZE_PTR(op_array->opcodes); @@ -1120,7 +1119,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr end++; } while (p < end) { - if (!IS_UNSERIALIZED(p->name)) { + if (IS_SERIALIZED(p->name)) { UNSERIALIZE_STR(p->name); } if (p->type & (Z_UL(1) << (sizeof(zend_type)*8-1))) { /* type is class */ @@ -1141,7 +1140,7 @@ static void zend_file_cache_unserialize_op_array(zend_op_array *op_arr p = op_array->vars; end = p + op_array->last_var; while (p < end) { - if (!IS_UNSERIALIZED(*p)) { + if (IS_SERIALIZED(*p)) { UNSERIALIZE_STR(*p); } p++; @@ -1173,19 +1172,19 @@ static void zend_file_cache_unserialize_prop_info(zval *zv, zend_persistent_script *script, void *buf) { - if (!IS_UNSERIALIZED(Z_PTR_P(zv))) { + if (IS_SERIALIZED(Z_PTR_P(zv))) { zend_property_info *prop; UNSERIALIZE_PTR(Z_PTR_P(zv)); prop = Z_PTR_P(zv); - if (prop->ce && !IS_UNSERIALIZED(prop->ce)) { + if (prop->ce && IS_SERIALIZED(prop->ce)) { UNSERIALIZE_PTR(prop->ce); } - if (prop->name && !IS_UNSERIALIZED(prop->name)) { + if (prop->name && IS_SERIALIZED(prop->name)) { UNSERIALIZE_STR(prop->name); } - if (prop->doc_comment && !IS_UNSERIALIZED(prop->doc_comment)) { + if (prop->doc_comment && IS_SERIALIZED(prop->doc_comment)) { UNSERIALIZE_STR(prop->doc_comment); } } @@ -1195,17 +1194,17 @@ static void zend_file_cache_unserialize_class_constant(zval * zend_persistent_script *script, void *buf) { - if (!IS_UNSERIALIZED(Z_PTR_P(zv))) { + if (IS_SERIALIZED(Z_PTR_P(zv))) { zend_class_constant *c; UNSERIALIZE_PTR(Z_PTR_P(zv)); c = Z_PTR_P(zv); zend_file_cache_unserialize_zval(&c->value, script, buf); - if (c->ce && !IS_UNSERIALIZED(c->ce)) { + if (c->ce && IS_SERIALIZED(c->ce)) { UNSERIALIZE_PTR(c->ce); } - if (c->doc_comment && !IS_UNSERIALIZED(c->doc_comment)) { + if (c->doc_comment && IS_SERIALIZED(c->doc_comment)) { UNSERIALIZE_STR(c->doc_comment); } } |