summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_compile.c3
-rw-r--r--Zend/zend_constants.c3
-rw-r--r--Zend/zend_execute_API.c3
-rw-r--r--Zend/zend_hash.c9
-rw-r--r--Zend/zend_object_handlers.c9
-rw-r--r--Zend/zend_operators.c4
-rw-r--r--Zend/zend_operators.h35
-rw-r--r--Zend/zend_string.c17
-rw-r--r--Zend/zend_string.h6
-rw-r--r--Zend/zend_vm_def.h45
-rw-r--r--Zend/zend_vm_execute.h408
-rw-r--r--ext/opcache/ZendAccelerator.c20
12 files changed, 112 insertions, 450 deletions
diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c
index e625fcfe42..0287b7a01a 100644
--- a/Zend/zend_compile.c
+++ b/Zend/zend_compile.c
@@ -408,8 +408,7 @@ static int lookup_cv(zend_op_array *op_array, zend_string *name) /* {{{ */{
while (i < op_array->last_var) {
if (ZSTR_VAL(op_array->vars[i]) == ZSTR_VAL(name) ||
(ZSTR_H(op_array->vars[i]) == hash_value &&
- ZSTR_LEN(op_array->vars[i]) == ZSTR_LEN(name) &&
- memcmp(ZSTR_VAL(op_array->vars[i]), ZSTR_VAL(name), ZSTR_LEN(name)) == 0)) {
+ zend_string_equal_content(op_array->vars[i], name))) {
return (int)(zend_intptr_t)ZEND_CALL_VAR_NUM(NULL, i);
}
i++;
diff --git a/Zend/zend_constants.c b/Zend/zend_constants.c
index 639c15807d..6e96ce7fc9 100644
--- a/Zend/zend_constants.c
+++ b/Zend/zend_constants.c
@@ -487,8 +487,7 @@ ZEND_API int zend_register_constant(zend_constant *c)
}
/* Check if the user is trying to define the internal pseudo constant name __COMPILER_HALT_OFFSET__ */
- if ((ZSTR_LEN(c->name) == sizeof("__COMPILER_HALT_OFFSET__")-1
- && !memcmp(ZSTR_VAL(name), "__COMPILER_HALT_OFFSET__", sizeof("__COMPILER_HALT_OFFSET__")-1))
+ if (zend_string_equals_literal(name, "__COMPILER_HALT_OFFSET__")
|| zend_hash_add_constant(EG(zend_constants), name, c) == NULL) {
/* The internal __COMPILER_HALT_OFFSET__ is prefixed by NULL byte */
diff --git a/Zend/zend_execute_API.c b/Zend/zend_execute_API.c
index c8d1e49376..8e366ca75c 100644
--- a/Zend/zend_execute_API.c
+++ b/Zend/zend_execute_API.c
@@ -1602,8 +1602,7 @@ ZEND_API int zend_set_local_var(zend_string *name, zval *value, int force) /* {{
do {
if (ZSTR_H(*str) == h &&
- ZSTR_LEN(*str) == ZSTR_LEN(name) &&
- memcmp(ZSTR_VAL(*str), ZSTR_VAL(name), ZSTR_LEN(name)) == 0) {
+ zend_string_equal_content(*str, name)) {
zval *var = EX_VAR_NUM(str - op_array->vars);
ZVAL_COPY_VALUE(var, value);
return SUCCESS;
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 08dd56ff27..ec2141eec4 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -486,8 +486,7 @@ static zend_always_inline Bucket *zend_hash_find_bucket(const HashTable *ht, zen
return p;
} else if (EXPECTED(p->h == h) &&
EXPECTED(p->key) &&
- EXPECTED(ZSTR_LEN(p->key) == ZSTR_LEN(key)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), ZSTR_VAL(key), ZSTR_LEN(key)) == 0)) {
+ EXPECTED(zend_string_equal_content(p->key, key))) {
return p;
}
idx = Z_NEXT(p->val);
@@ -1125,8 +1124,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_del(HashTable *ht, zend_string *key)
if ((p->key == key) ||
(p->h == h &&
p->key &&
- ZSTR_LEN(p->key) == ZSTR_LEN(key) &&
- memcmp(ZSTR_VAL(p->key), ZSTR_VAL(key), ZSTR_LEN(key)) == 0)) {
+ zend_string_equal_content(p->key, key))) {
_zend_hash_del_el_ex(ht, idx, p, prev);
return SUCCESS;
}
@@ -1156,8 +1154,7 @@ ZEND_API int ZEND_FASTCALL zend_hash_del_ind(HashTable *ht, zend_string *key)
if ((p->key == key) ||
(p->h == h &&
p->key &&
- ZSTR_LEN(p->key) == ZSTR_LEN(key) &&
- memcmp(ZSTR_VAL(p->key), ZSTR_VAL(key), ZSTR_LEN(key)) == 0)) {
+ zend_string_equal_content(p->key, key))) {
if (Z_TYPE(p->val) == IS_INDIRECT) {
zval *data = Z_INDIRECT(p->val);
diff --git a/Zend/zend_object_handlers.c b/Zend/zend_object_handlers.c
index 4a78d796fe..d99fb7338f 100644
--- a/Zend/zend_object_handlers.c
+++ b/Zend/zend_object_handlers.c
@@ -502,8 +502,7 @@ ZEND_API uint32_t *zend_get_property_guard(zend_object *zobj, zend_string *membe
if (EXPECTED(str == member) ||
/* hash values are always pred-calculated here */
(EXPECTED(ZSTR_H(str) == ZSTR_H(member)) &&
- EXPECTED(ZSTR_LEN(str) == ZSTR_LEN(member)) &&
- EXPECTED(memcmp(ZSTR_VAL(str), ZSTR_VAL(member), ZSTR_LEN(member)) == 0))) {
+ EXPECTED(zend_string_equal_content(str, member)))) {
return &zv->u2.property_guard;
} else if (EXPECTED(zv->u2.property_guard == 0)) {
zend_string_release(Z_STR_P(zv));
@@ -580,8 +579,7 @@ zval *zend_std_read_property(zval *object, zval *member, int type, void **cache_
(EXPECTED(p->key == Z_STR_P(member)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(member))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(member)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(member), Z_STRLEN_P(member)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(member)))))) {
retval = &p->val;
goto exit;
}
@@ -1563,8 +1561,7 @@ static int zend_std_has_property(zval *object, zval *member, int has_set_exists,
(EXPECTED(p->key == Z_STR_P(member)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(member))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(member)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(member), Z_STRLEN_P(member)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(member)))))) {
value = &p->val;
goto found;
}
diff --git a/Zend/zend_operators.c b/Zend/zend_operators.c
index d3f7729fed..7217108338 100644
--- a/Zend/zend_operators.c
+++ b/Zend/zend_operators.c
@@ -2143,9 +2143,7 @@ ZEND_API int ZEND_FASTCALL zend_is_identical(zval *op1, zval *op2) /* {{{ */
case IS_DOUBLE:
return (Z_DVAL_P(op1) == Z_DVAL_P(op2));
case IS_STRING:
- return (Z_STR_P(op1) == Z_STR_P(op2) ||
- (Z_STRLEN_P(op1) == Z_STRLEN_P(op2) &&
- memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0));
+ return zend_string_equals(Z_STR_P(op1), Z_STR_P(op2));
case IS_ARRAY:
return (Z_ARRVAL_P(op1) == Z_ARRVAL_P(op2) ||
zend_hash_compare(Z_ARRVAL_P(op1), Z_ARRVAL_P(op2), (compare_func_t) hash_zval_identical_function, 1) == 0);
diff --git a/Zend/zend_operators.h b/Zend/zend_operators.h
index 50e1e2dd58..a21727f7ab 100644
--- a/Zend/zend_operators.h
+++ b/Zend/zend_operators.h
@@ -721,6 +721,17 @@ static zend_always_inline int fast_div_function(zval *result, zval *op1, zval *o
return div_function(result, op1, op2);
}
+static zend_always_inline int zend_fast_equal_strings(zend_string *s1, zend_string *s2)
+{
+ if (s1 == s2) {
+ return 1;
+ } else if (ZSTR_VAL(s1)[0] > '9' || ZSTR_VAL(s2)[0] > '9') {
+ return zend_string_equal_content(s1, s2);
+ } else {
+ return zendi_smart_strcmp(s1, s2) == 0;
+ }
+}
+
static zend_always_inline int fast_equal_check_function(zval *op1, zval *op2)
{
zval result;
@@ -738,17 +749,7 @@ static zend_always_inline int fast_equal_check_function(zval *op1, zval *op2)
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- return 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- return 0;
- } else {
- return memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0;
- }
- } else {
- return zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0;
- }
+ return zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
}
}
compare_function(&result, op1, op2);
@@ -769,17 +770,7 @@ static zend_always_inline int fast_equal_check_string(zval *op1, zval *op2)
{
zval result;
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- return 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- return 0;
- } else {
- return memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0;
- }
- } else {
- return zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0;
- }
+ return zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
}
compare_function(&result, op1, op2);
return Z_LVAL(result) == 0;
diff --git a/Zend/zend_string.c b/Zend/zend_string.c
index ad51148d4a..bceb328f7f 100644
--- a/Zend/zend_string.c
+++ b/Zend/zend_string.c
@@ -129,7 +129,22 @@ static zend_always_inline zend_string *zend_interned_string_ht_lookup_ex(zend_ul
static zend_always_inline zend_string *zend_interned_string_ht_lookup(zend_string *str, HashTable *interned_strings)
{
- return zend_interned_string_ht_lookup_ex(ZSTR_H(str), ZSTR_VAL(str), ZSTR_LEN(str), interned_strings);
+ zend_ulong h = ZSTR_H(str);
+ uint32_t nIndex;
+ uint32_t idx;
+ Bucket *p;
+
+ nIndex = h | interned_strings->nTableMask;
+ idx = HT_HASH(interned_strings, nIndex);
+ while (idx != HT_INVALID_IDX) {
+ p = HT_HASH_TO_BUCKET(interned_strings, idx);
+ if ((p->h == h) && zend_string_equal_content(p->key, str)) {
+ return p->key;
+ }
+ idx = Z_NEXT(p->val);
+ }
+
+ return NULL;
}
/* This function might be not thread safe at least because it would update the
diff --git a/Zend/zend_string.h b/Zend/zend_string.h
index eb981df822..686895d817 100644
--- a/Zend/zend_string.h
+++ b/Zend/zend_string.h
@@ -288,10 +288,14 @@ static zend_always_inline void zend_string_release(zend_string *s)
}
}
+static zend_always_inline zend_bool zend_string_equal_content(zend_string *s1, zend_string *s2)
+{
+ return ZSTR_LEN(s1) == ZSTR_LEN(s2) && !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1));
+}
static zend_always_inline zend_bool zend_string_equals(zend_string *s1, zend_string *s2)
{
- return s1 == s2 || (ZSTR_LEN(s1) == ZSTR_LEN(s2) && !memcmp(ZSTR_VAL(s1), ZSTR_VAL(s2), ZSTR_LEN(s1)));
+ return s1 == s2 || zend_string_equal_content(s1, s2);
}
#define zend_string_equals_ci(s1, s2) \
diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h
index 0513034107..e9b79c3885 100644
--- a/Zend/zend_vm_def.h
+++ b/Zend/zend_vm_def.h
@@ -409,17 +409,7 @@ ZEND_VM_HANDLER(17, ZEND_IS_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
FREE_OP1();
FREE_OP2();
} else {
@@ -477,17 +467,7 @@ ZEND_VM_HANDLER(18, ZEND_IS_NOT_EQUAL, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
FREE_OP1();
FREE_OP2();
} else {
@@ -1809,8 +1789,7 @@ ZEND_VM_HANDLER(82, ZEND_FETCH_OBJ_R, CONST|TMP|VAR|UNUSED|THIS|CV, CONST|TMPVAR
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -1957,8 +1936,7 @@ ZEND_VM_HANDLER(91, ZEND_FETCH_OBJ_IS, CONST|TMPVAR|UNUSED|THIS|CV, CONST|TMPVAR
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -4850,17 +4828,7 @@ ZEND_VM_HANDLER(48, ZEND_CASE, CONST|TMPVAR|CV, CONST|TMPVAR|CV)
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
FREE_OP2();
} else {
break;
@@ -7588,8 +7556,7 @@ ZEND_VM_HOT_HANDLER(168, ZEND_BIND_GLOBAL, CV, CONST)
(EXPECTED(p->key == Z_STR_P(varname)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(varname)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(varname), Z_STRLEN_P(varname)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
value = (zval*)p; /* value = &p->val; */
ZEND_VM_C_GOTO(check_indirect);
diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h
index 185a89a496..20778c0487 100644
--- a/Zend/zend_vm_execute.h
+++ b/Zend/zend_vm_execute.h
@@ -4523,17 +4523,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CONST_HAND
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -4591,17 +4581,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CONST_
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -5062,8 +5042,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CONST_H
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -5162,8 +5141,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CONST_
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -5745,17 +5723,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CONST_HANDLER(
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
break;
@@ -8698,17 +8666,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_CV_HANDLER
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -8766,17 +8724,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_CV_HAN
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -9170,8 +9118,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_CV_HAND
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -9270,8 +9217,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_CV_HAN
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -9908,17 +9854,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_CV_HANDLER(ZEN
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
break;
@@ -10767,17 +10703,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CONST_TMPVAR_HAN
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
@@ -10835,17 +10761,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CONST_TMPVAR
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
@@ -11239,8 +11155,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CONST_TMPVAR_
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -11340,8 +11255,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CONST_TMPVAR
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -11926,17 +11840,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CONST_TMPVAR_HANDLER
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
break;
@@ -13789,8 +13693,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CONST_HAN
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -15164,8 +15067,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_CV_HANDLE
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -15717,8 +15619,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_TMP_TMPVAR_HA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -18563,8 +18464,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CONST_HAN
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -22876,8 +22776,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_CV_HANDLE
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -25485,8 +25384,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_VAR_TMPVAR_HA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -27548,8 +27446,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CONST_
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -27695,8 +27592,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CONST
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -30184,8 +30080,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_CV_HAN
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -30331,8 +30226,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_CV_HA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -31939,8 +31833,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_UNUSED_TMPVAR
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -32087,8 +31980,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_UNUSED_TMPVA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -35357,17 +35249,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CONST_HANDLER
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -35425,17 +35307,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CONST_HAN
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -36517,8 +36389,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CONST_HAND
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -36664,8 +36535,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CONST_HAN
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -38078,17 +37948,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CONST_HANDLER(ZEN
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
break;
@@ -38891,8 +38751,7 @@ static ZEND_VM_HOT ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_BIND_GLOBAL_SPEC_C
(EXPECTED(p->key == Z_STR_P(varname)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(varname))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(varname)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(varname), Z_STRLEN_P(varname)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(varname)))))) {
value = (zval*)p; /* value = &p->val; */
goto check_indirect;
@@ -41908,17 +41767,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_CV_HANDLER(ZE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -41976,17 +41825,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_CV_HANDLE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
@@ -43001,8 +42840,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_CV_HANDLER
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -43148,8 +42986,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_CV_HANDLE
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -44618,17 +44455,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_CV_HANDLER(ZEND_O
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
break;
@@ -45606,17 +45433,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_CV_TMPVAR_HANDLE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
@@ -45674,17 +45491,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_CV_TMPVAR_HA
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
@@ -46703,8 +46510,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_R_SPEC_CV_TMPVAR_HAN
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY_UNREF(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -46851,8 +46657,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_CV_TMPVAR_HA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -48211,17 +48016,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_CV_TMPVAR_HANDLER(ZE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
break;
@@ -49598,17 +49393,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CONST_HAN
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op1);
} else {
@@ -49666,17 +49451,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CONST
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op1);
} else {
@@ -50094,8 +49869,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CONST
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -50411,17 +50185,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CONST_HANDLER
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
break;
@@ -52054,17 +51818,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_CV_HANDLE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op1);
} else {
@@ -52122,17 +51876,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_CV_HA
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op1);
} else {
@@ -52481,8 +52225,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_CV_HA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -52798,17 +52541,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_CV_HANDLER(ZE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
} else {
break;
@@ -53409,17 +53142,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_EQUAL_SPEC_TMPVAR_TMPVAR_HA
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
} else {
@@ -53477,17 +53200,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_IS_NOT_EQUAL_SPEC_TMPVAR_TMPVA
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 0;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 1;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) != 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) != 0);
- }
+ result = !zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op1);
zval_ptr_dtor_nogc(free_op2);
} else {
@@ -53836,8 +53549,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FETCH_OBJ_IS_SPEC_TMPVAR_TMPVA
(EXPECTED(p->key == Z_STR_P(offset)) ||
(EXPECTED(p->h == ZSTR_H(Z_STR_P(offset))) &&
EXPECTED(p->key != NULL) &&
- EXPECTED(ZSTR_LEN(p->key) == Z_STRLEN_P(offset)) &&
- EXPECTED(memcmp(ZSTR_VAL(p->key), Z_STRVAL_P(offset), Z_STRLEN_P(offset)) == 0)))) {
+ EXPECTED(zend_string_equal_content(p->key, Z_STR_P(offset)))))) {
ZVAL_COPY(EX_VAR(opline->result.var), &p->val);
break;
}
@@ -54155,17 +53867,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_CASE_SPEC_TMPVAR_TMPVAR_HANDLE
}
} else if (EXPECTED(Z_TYPE_P(op1) == IS_STRING)) {
if (EXPECTED(Z_TYPE_P(op2) == IS_STRING)) {
- if (Z_STR_P(op1) == Z_STR_P(op2)) {
- result = 1;
- } else if (Z_STRVAL_P(op1)[0] > '9' || Z_STRVAL_P(op2)[0] > '9') {
- if (Z_STRLEN_P(op1) != Z_STRLEN_P(op2)) {
- result = 0;
- } else {
- result = (memcmp(Z_STRVAL_P(op1), Z_STRVAL_P(op2), Z_STRLEN_P(op1)) == 0);
- }
- } else {
- result = (zendi_smart_strcmp(Z_STR_P(op1), Z_STR_P(op2)) == 0);
- }
+ result = zend_fast_equal_strings(Z_STR_P(op1), Z_STR_P(op2));
zval_ptr_dtor_nogc(free_op2);
} else {
break;
diff --git a/ext/opcache/ZendAccelerator.c b/ext/opcache/ZendAccelerator.c
index 2a50b59eed..9094f1a5db 100644
--- a/ext/opcache/ZendAccelerator.c
+++ b/ext/opcache/ZendAccelerator.c
@@ -411,10 +411,8 @@ static zend_string *accel_find_interned_string(zend_string *str)
arData = ZCSG(interned_strings).arData;
while (idx != HT_INVALID_IDX) {
p = HT_HASH_TO_BUCKET_EX(arData, idx);
- if ((p->h == h) && (ZSTR_LEN(p->key) == ZSTR_LEN(str))) {
- if (!memcmp(ZSTR_VAL(p->key), ZSTR_VAL(str), ZSTR_LEN(str))) {
- return p->key;
- }
+ if (p->h == h && zend_string_equal_content(p->key, str)) {
+ return p->key;
}
idx = Z_NEXT(p->val);
}
@@ -447,11 +445,9 @@ zend_string *accel_new_interned_string(zend_string *str)
idx = HT_HASH(&ZCSG(interned_strings), nIndex);
while (idx != HT_INVALID_IDX) {
p = HT_HASH_TO_BUCKET(&ZCSG(interned_strings), idx);
- if ((p->h == h) && (ZSTR_LEN(p->key) == ZSTR_LEN(str))) {
- if (!memcmp(ZSTR_VAL(p->key), ZSTR_VAL(str), ZSTR_LEN(str))) {
- zend_string_release(str);
- return p->key;
- }
+ if (p->h == h && zend_string_equal_content(p->key, str)) {
+ zend_string_release(str);
+ return p->key;
}
idx = Z_NEXT(p->val);
}
@@ -1033,16 +1029,14 @@ static inline int do_validate_timestamps(zend_persistent_script *persistent_scri
*/
if (file_handle->opened_path) {
if (persistent_script->script.filename != file_handle->opened_path &&
- (ZSTR_LEN(persistent_script->script.filename) != ZSTR_LEN(file_handle->opened_path) ||
- memcmp(ZSTR_VAL(persistent_script->script.filename), ZSTR_VAL(file_handle->opened_path), ZSTR_LEN(file_handle->opened_path)) != 0)) {
+ !zend_string_equal_content(persistent_script->script.filename, file_handle->opened_path)) {
return FAILURE;
}
} else {
full_path_ptr = accelerator_orig_zend_resolve_path(file_handle->filename, strlen(file_handle->filename));
if (full_path_ptr &&
persistent_script->script.filename != full_path_ptr &&
- (ZSTR_LEN(persistent_script->script.filename) != ZSTR_LEN(full_path_ptr) ||
- memcmp(ZSTR_VAL(persistent_script->script.filename), ZSTR_VAL(full_path_ptr), ZSTR_LEN(full_path_ptr)) != 0)) {
+ !zend_string_equal_content(persistent_script->script.filename, full_path_ptr)) {
zend_string_release(full_path_ptr);
return FAILURE;
}