ID:               34199
 Updated by:       [EMAIL PROTECTED]
 Reported By:      [EMAIL PROTECTED]
-Status:           Analyzed
+Status:           Critical
 Bug Type:         Scripting Engine problem
 Operating System: Any
 PHP Version:      5CVS-2005-08-20 (CVS)
 New Comment:

Marking it critical.  I think we need to get this cleaned up before 5.1
goes out.  Having 2 different opcodes handling this that can potentially
return conflicting results causes all sorts of confusion.  Took me about
an hour working backwards through assumptions before I finally figured
out that if() and if(!) were to blame.


Previous Comments:
------------------------------------------------------------------------

[2005-08-20 22:33:31] [EMAIL PROTECTED]

if ($kids) if handled by ZEND_JMPZ_SPEC_CV_HANDLER which ends up
calling i_zend_is_true and returning TRUE because $kids is an object.

if (! $kids) is handled by ZEND_BOOL_NOT_SPEC_CV_HANDLER which calls
convert_to_boolean and ends up calling the objects cast_object handler,
which in this case is sxe_object_cast and returns FALSE because object
is really empty.

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

[2005-08-20 21:13:15] [EMAIL PROTECTED]

Description:
------------
An empty SimpleXMLElement object is both true and false

Reproduce code:
---------------
$xml = "<root></root>";
$xml = simplexml_load_string($xml);
$kids = $xml->children();
if($kids) echo "True";
if(!$kids) echo "False";

Expected result:
----------------
False

Actual result:
--------------
TrueFalse


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


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

Reply via email to