Bug #53860 [Opn->Bgs]: unexpected behaviour in 'foreach' syntax checking

From: Date: Thu, 27 Jan 2011 21:21:52 +0000
Subject: Bug #53860 [Opn->Bgs]: unexpected behaviour in 'foreach' syntax checking
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-158249@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=53860&edit=1

 ID:                 53860
 Updated by:         rasmus@php.net
 Reported by:        soriasoft at gmail dot com
 Summary:            unexpected behaviour in 'foreach' syntax checking
-Status:             Open
+Status:             Bogus
 Type:               Bug
 Package:            Unknown/Other Function
 Operating System:   Linux
 PHP Version:        5.3.5
 Block user comment: N
 Private report:     N

 New Comment:

There is no syntax error there though.

foreach(...);  is a valid loop construct and { expr; } is also a valid
construct 
on its own.


Previous Comments:
------------------------------------------------------------------------
[2011-01-27 21:41:41] soriasoft at gmail dot com

Description:
------------
I found and unexpected behavior in the syntax checking. When you write a
';' after the open brace, the parser doesn't display an error or notice
message, and executes the code with the last element of the array. I
test this in php5.3 and php5.2.

This "innocent" ; is realy hard to debug.

The enviroments:

joac@pepino ~/ReposGcoop $ php -v
PHP 5.3.3 with Suhosin-Patch (cli) (built: Jul 25 2010 12:50:19) 
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies

debdev@jaula:~/www$ php -v
PHP 5.2.6-1+lenny9 with Suhosin-Patch 0.9.6.2 (cli) (built: Aug  4 2010
03:25:57) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
    with Xdebug v2.0.3, Copyright (c) 2002-2007, by Derick Rethans


Test script:
---------------
<?php
function show_array(&$data_array){
    foreach ($data_array as $key=>$value);
    {   
        print "$key => $value\n";
        if ( is_array( $value ) ){
           show_array1( $value );
           print "End of nested Array\n";
        }   
    }   
};
$evil_array = array (
        'item1' => array ( 'item1_1' => array( 'item1_1_1' =>
1,
'item1_1_2' => 2 ),
        'item1_2' => array( 'item1_2_1' => 3,),
        ),  
    'item2' => '4'); 

show_array($evil_array);
?>
Output:

joac@pepino ~/ReposGcoop $ php bugphp.php 
item2 => 4


Expected result:
----------------
I expect some error or notice for this syntax error.

Actual result:
--------------
joac@pepino ~/ReposGcoop $ php bugphp.php 
item2 => 4


------------------------------------------------------------------------



-- 
Edit this bug report at http://bugs.php.net/bug.php?id=53860&edit=1


Thread (3 messages)

« previous php.bugs (#158249) next »