Fixed ext/spl/tests/bug61347.phpt failure introduced by ZEND_ARRAY_KEY_EXISTS opcode

This commit is contained in:
Dmitry Stogov 2018-12-27 00:20:20 +03:00
parent 0bbfebb6d9
commit 70fcbe3524
2 changed files with 50 additions and 10 deletions

View File

@ -6388,7 +6388,7 @@ ZEND_VM_C_LABEL(try_again_subject):
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
ZEND_VM_C_GOTO(try_again_subject);
@ -6426,6 +6426,10 @@ ZEND_VM_C_LABEL(try_again_key):
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
FREE_OP2();
FREE_OP1();
ZEND_VM_SMART_BRANCH(result, 1);

View File

@ -5754,7 +5754,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -5792,6 +5792,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
@ -7774,7 +7778,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -7812,6 +7816,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_SMART_BRANCH(result, 1);
@ -10905,7 +10913,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -10943,6 +10951,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
@ -14530,7 +14542,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -14568,6 +14580,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
@ -16053,7 +16069,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -16091,6 +16107,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
zval_ptr_dtor_nogc(free_op2);
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
@ -17976,7 +17996,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -18014,6 +18034,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
zval_ptr_dtor_nogc(free_op1);
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
@ -41614,7 +41638,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -41652,6 +41676,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);
@ -45209,7 +45237,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -45247,6 +45275,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
zval_ptr_dtor_nogc(free_op2);
ZEND_VM_SMART_BRANCH(result, 1);
@ -51069,7 +51101,7 @@ try_again_subject:
if (EXPECTED(Z_TYPE_P(subject) == IS_ARRAY)) {
ht = Z_ARRVAL_P(subject);
} else if (UNEXPECTED(Z_TYPE_P(subject) == IS_OBJECT)) {
ht = Z_OBJPROP_P(subject);
ht = zend_get_properties_for(subject, ZEND_PROP_PURPOSE_ARRAY_CAST);
} else if (Z_ISREF_P(subject)) {
subject = Z_REFVAL_P(subject);
goto try_again_subject;
@ -51107,6 +51139,10 @@ try_again_key:
result = 0;
}
if (Z_TYPE_P(subject) != IS_ARRAY) {
zend_release_properties(ht);
}
ZEND_VM_SMART_BRANCH(result, 1);
ZVAL_BOOL(EX_VAR(opline->result.var), result);