diff --git a/Zend/zend_vm_def.h b/Zend/zend_vm_def.h index 799a66e5ebc..193ea32c623 100644 --- a/Zend/zend_vm_def.h +++ b/Zend/zend_vm_def.h @@ -6102,10 +6102,11 @@ ZEND_VM_HANDLER(78, ZEND_FE_FETCH_R, VAR, ANY) } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); -ZEND_VM_C_LABEL(fe_fetch_r_exit): - if (EXPECTED(!EG(exception))) { - ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); } +ZEND_VM_C_LABEL(fe_fetch_r_exit): + ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } @@ -6293,10 +6294,11 @@ ZEND_VM_HANDLER(126, ZEND_FE_FETCH_RW, VAR, ANY) } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); -ZEND_VM_C_LABEL(fe_fetch_w_exit): - if (EXPECTED(!EG(exception))) { - ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); } +ZEND_VM_C_LABEL(fe_fetch_w_exit): + ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } diff --git a/Zend/zend_vm_execute.h b/Zend/zend_vm_execute.h index a9cb1e6207f..2889de55f25 100644 --- a/Zend/zend_vm_execute.h +++ b/Zend/zend_vm_execute.h @@ -15912,10 +15912,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_R_SPEC_VAR_HANDLER(ZE } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); -fe_fetch_r_exit: - if (EXPECTED(!EG(exception))) { - ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); } +fe_fetch_r_exit: + ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } @@ -16103,10 +16104,11 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL ZEND_FE_FETCH_RW_SPEC_VAR_HANDLER(Z } } else { zend_error(E_WARNING, "Invalid argument supplied for foreach()"); -fe_fetch_w_exit: - if (EXPECTED(!EG(exception))) { - ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); + if (UNEXPECTED(EG(exception))) { + HANDLE_EXCEPTION(); } +fe_fetch_w_exit: + ZEND_VM_SET_RELATIVE_OPCODE(opline, opline->extended_value); ZEND_VM_CONTINUE(); } diff --git a/ext/ldap/ldap.c b/ext/ldap/ldap.c index 80ed4961c23..c717e63982e 100644 --- a/ext/ldap/ldap.c +++ b/ext/ldap/ldap.c @@ -667,7 +667,7 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in /* timelimit */ if (timelimit > -1) { #if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP - ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_timelimit); + ldap_get_option(ldap, LDAP_OPT_TIMELIMIT, old_timelimit); ldap_set_option(ldap, LDAP_OPT_TIMELIMIT, &timelimit); #else *old_timelimit = ldap->ld_timelimit; @@ -678,7 +678,7 @@ static void php_set_opts(LDAP *ldap, int sizelimit, int timelimit, int deref, in /* deref */ if (deref > -1) { #if (LDAP_API_VERSION >= 2004) || HAVE_NSLDAP || HAVE_ORALDAP - ldap_get_option(ldap, LDAP_OPT_SIZELIMIT, old_deref); + ldap_get_option(ldap, LDAP_OPT_DEREF, old_deref); ldap_set_option(ldap, LDAP_OPT_DEREF, &deref); #else *old_deref = ldap->ld_deref; diff --git a/ext/ldap/tests/ldap_search_overrides.phpt b/ext/ldap/tests/ldap_search_overrides.phpt new file mode 100644 index 00000000000..72d8e2498e5 --- /dev/null +++ b/ext/ldap/tests/ldap_search_overrides.phpt @@ -0,0 +1,215 @@ +--TEST-- +ldap_search() test - test that overrides aren't permanent +--CREDITS-- +Tyson Andre +# Based on ldap_search_basic.phpt +--SKIPIF-- + +--FILE-- + +===DONE=== +--CLEAN-- + +--EXPECTF-- +resource(%d) of type (ldap result) +array(4) { + ["count"]=> + int(3) + [0]=> + array(14) { + ["objectclass"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(6) "person" + } + [0]=> + string(11) "objectclass" + ["cn"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(5) "userA" + } + [1]=> + string(2) "cn" + ["sn"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(7) "testSN1" + } + [2]=> + string(2) "sn" + ["userpassword"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(4) "oops" + } + [3]=> + string(12) "userpassword" + ["telephonenumber"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(14) "xx-xx-xx-xx-xx" + } + [4]=> + string(15) "telephonenumber" + ["description"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(6) "user A" + } + [5]=> + string(11) "description" + ["count"]=> + int(6) + ["dn"]=> + string(%d) "cn=userA,%s" + } + [1]=> + array(12) { + ["objectclass"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(6) "person" + } + [0]=> + string(11) "objectclass" + ["cn"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(5) "userB" + } + [1]=> + string(2) "cn" + ["sn"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(7) "testSN2" + } + [2]=> + string(2) "sn" + ["userpassword"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(15) "oopsIDitItAgain" + } + [3]=> + string(12) "userpassword" + ["description"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(6) "user B" + } + [4]=> + string(11) "description" + ["count"]=> + int(5) + ["dn"]=> + string(%d) "cn=userB,%s" + } + [2]=> + array(10) { + ["objectclass"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(6) "person" + } + [0]=> + string(11) "objectclass" + ["cn"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(5) "userC" + } + [1]=> + string(2) "cn" + ["sn"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(7) "testSN3" + } + [2]=> + string(2) "sn" + ["userpassword"]=> + array(2) { + ["count"]=> + int(1) + [0]=> + string(17) "0r1g1na1 passw0rd" + } + [3]=> + string(12) "userpassword" + ["count"]=> + int(4) + ["dn"]=> + string(%d) "cn=userC,cn=userB,%s" + } +} +bool(true) +int(1) +bool(true) +int(123) +bool(true) +int(33) +bool(true) +int(44) +===DONE===