From:             cleo at anarki dot dk
Operating system: WinXP, Mandriva Linux 2006
PHP version:      5.1.2
PHP Bug Type:     *General Issues
Bug description:  Short cirquit AND evaluates like OR

Description:
------------
Consider the following piece of code:
  $res= ($h>=0) and ($h<=23);
It could be used to determine if a user has submitted an hour between 0
and 23.

However, if the user enters 25, then the function evaluates to true!!!!

If you reverse the order of the operands like this:
  $res = ($h<=23) and ($h>=0);
...then a $h value of 25 will make the function evaluate to false.

But now -1 will make it evaluate to true!

So clearly, this must be a major bug.
Best regards
Claus Holm, Copenhagen, Denmark

Reproduce code:
---------------
<? if (isset($_POST['test'])) {
    $hours= $_POST['e_hours'];
    $hours= (integer)$hours;
    echo "You entered $hours <br>";
    echo 'Now we test: ($hours>=0) and ($hours<=23)<br>';
    $test1= ($hours>=0) and ($hours<=23);
    echo $test1 ? "ok" : "nope";
    echo "<br>";
    echo 'And now we test: ($hours<=23)and($hours>=0)<br>';
    $test2= ($hours<=23) and ($hours>=0);
    echo $test2 ? "ok" : "nope";
  }
  else {
?>  Input an hour between 0 and 23:<br>
    <FORM action="<?=$_SERVER['PHP_SELF']?>" method="post">
      <INPUT type="text" name="e_hours" value=""><br>
      <INPUT type="submit" name="test" value="Run test">
    </form>
<?}
?>


Expected result:
----------------
If the value 25 is entered, then I should see this:


You entered 25
Now we test: ($hours>=0) and ($hours<=23)
nope
And now we test: ($hours<=23) and ($hours>=0)
nope

Actual result:
--------------
You entered 25
Now we test: ($hours>=0) and ($hours<=23)
ok
And now we test: ($hours<=23) and ($hours>=0)
nope

-- 
Edit bug report at http://bugs.php.net/?id=36799&edit=1
-- 
Try a CVS snapshot (PHP 4.4): 
http://bugs.php.net/fix.php?id=36799&r=trysnapshot44
Try a CVS snapshot (PHP 5.1): 
http://bugs.php.net/fix.php?id=36799&r=trysnapshot51
Try a CVS snapshot (PHP 6.0): 
http://bugs.php.net/fix.php?id=36799&r=trysnapshot60
Fixed in CVS:                 http://bugs.php.net/fix.php?id=36799&r=fixedcvs
Fixed in release:             
http://bugs.php.net/fix.php?id=36799&r=alreadyfixed
Need backtrace:               http://bugs.php.net/fix.php?id=36799&r=needtrace
Need Reproduce Script:        http://bugs.php.net/fix.php?id=36799&r=needscript
Try newer version:            http://bugs.php.net/fix.php?id=36799&r=oldversion
Not developer issue:          http://bugs.php.net/fix.php?id=36799&r=support
Expected behavior:            http://bugs.php.net/fix.php?id=36799&r=notwrong
Not enough info:              
http://bugs.php.net/fix.php?id=36799&r=notenoughinfo
Submitted twice:              
http://bugs.php.net/fix.php?id=36799&r=submittedtwice
register_globals:             http://bugs.php.net/fix.php?id=36799&r=globals
PHP 3 support discontinued:   http://bugs.php.net/fix.php?id=36799&r=php3
Daylight Savings:             http://bugs.php.net/fix.php?id=36799&r=dst
IIS Stability:                http://bugs.php.net/fix.php?id=36799&r=isapi
Install GNU Sed:              http://bugs.php.net/fix.php?id=36799&r=gnused
Floating point limitations:   http://bugs.php.net/fix.php?id=36799&r=float
No Zend Extensions:           http://bugs.php.net/fix.php?id=36799&r=nozend
MySQL Configuration Error:    http://bugs.php.net/fix.php?id=36799&r=mysqlcfg

Reply via email to