svn: /php/php-src/trunk/Zend/ tests/bug48912.phpt zend_vm_def.h zend_vm_execute.h
| From: | Dmitry Stogov | Date: | Tue, 28 Jul 2009 12:36:08 +0000 |
| Subject: | svn: /php/php-src/trunk/Zend/ tests/bug48912.phpt zend_vm_def.h zend_vm_execute.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-59874@lists.php.net to get a copy of this message | ||
dmitry Tue, 28 Jul 2009 12:36:08 +0000
Revision: http://svn.php.net/viewvc?view=revision&revision=286453
Log:
Fixed bug #48912 (Namespace causes unexpected strict behaviour with extract())
Bug: http://bugs.php.net/48912 (Assigned) Namespace causes
unexpected strict behaviour with extract()
Changed paths:
A php/php-src/trunk/Zend/tests/bug48912.phpt
U php/php-src/trunk/Zend/zend_vm_def.h
U php/php-src/trunk/Zend/zend_vm_execute.h
Added: php/php-src/trunk/Zend/tests/bug48912.phpt
===================================================================
--- php/php-src/trunk/Zend/tests/bug48912.phpt (rev 0)
+++ php/php-src/trunk/Zend/tests/bug48912.phpt 2009-07-28 12:36:08 UTC (rev 286453)
@@ -0,0 +1,16 @@
+--TEST--
+Bug #48912 (Namespace causes unexpected strict behaviour with extract())
+--FILE--
+<?php
+namespace A;
+
+function test()
+{
+ extract(func_get_arg(0));
+}
+
+test(array('x' => 1));
+echo "ok\n";
+?>
+--EXPECT--
+ok
Modified: php/php-src/trunk/Zend/zend_vm_def.h
===================================================================
--- php/php-src/trunk/Zend/zend_vm_def.h 2009-07-28 12:35:27 UTC (rev 286452)
+++ php/php-src/trunk/Zend/zend_vm_def.h 2009-07-28 12:36:08 UTC (rev 286453)
@@ -2749,7 +2749,9 @@
} else {
zval *valptr;
- if (!(opline->extended_value & ZEND_ARG_SEND_SILENT)) {
+ if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
+ !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
+ !ARG_MAY_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
zend_error(E_STRICT, "Only variables should be passed by reference");
}
ALLOC_ZVAL(valptr);
Modified: php/php-src/trunk/Zend/zend_vm_execute.h
===================================================================
--- php/php-src/trunk/Zend/zend_vm_execute.h 2009-07-28 12:35:27 UTC (rev 286452)
+++ php/php-src/trunk/Zend/zend_vm_execute.h 2009-07-28 12:36:08 UTC (rev 286453)
@@ -24,9 +24,6 @@
static opcode_handler_t zend_vm_get_opcode_handler(zend_uchar opcode, zend_op* op);
-#ifdef PHP_WIN32
-#pragma warning (disable:4101)
-#endif
#define ZEND_VM_CONTINUE() return 0
#define ZEND_VM_RETURN() return 1
@@ -653,12 +650,12 @@
for (i=0; i<EX(op_array)->last_brk_cont; i++) {
if (EX(op_array)->brk_cont_array[i].start < 0) {
continue;
- } else if ((zend_uint)EX(op_array)->brk_cont_array[i].start > op_num) {
+ } else if (EX(op_array)->brk_cont_array[i].start > op_num) {
/* further blocks will not be relevant... */
break;
- } else if (op_num < (zend_uint)EX(op_array)->brk_cont_array[i].brk) {
+ } else if (op_num < EX(op_array)->brk_cont_array[i].brk) {
if (!catched ||
- catch_op_num >= (zend_uint)EX(op_array)->brk_cont_array[i].brk) {
+ catch_op_num >= EX(op_array)->brk_cont_array[i].brk) {
zend_op *brk_opline = &EX(op_array)->opcodes[EX(op_array)->brk_cont_array[i].brk];
switch (brk_opline->opcode) {
@@ -8573,7 +8570,9 @@
} else {
zval *valptr;
- if (!(opline->extended_value & ZEND_ARG_SEND_SILENT)) {
+ if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
+ !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
+ !ARG_MAY_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
zend_error(E_STRICT, "Only variables should be passed by reference");
}
ALLOC_ZVAL(valptr);
@@ -23106,7 +23105,9 @@
} else {
zval *valptr;
- if (!(opline->extended_value & ZEND_ARG_SEND_SILENT)) {
+ if ((opline->extended_value & ZEND_ARG_COMPILE_TIME_BOUND) ?
+ !(opline->extended_value & ZEND_ARG_SEND_SILENT) :
+ !ARG_MAY_BE_SENT_BY_REF(EX(fbc), opline->op2.u.opline_num)) {
zend_error(E_STRICT, "Only variables should be passed by reference");
}
ALLOC_ZVAL(valptr);
@@ -31297,7 +31298,6 @@
static int ZEND_FASTCALL ZEND_NULL_HANDLER(ZEND_OPCODE_HANDLER_ARGS)
{
zend_error_noreturn(E_ERROR, "Invalid opcode %d/%d/%d.", EX(opline)->opcode,
EX(opline)->op1.op_type, EX(opline)->op2.op_type);
- return 0;
}