Bug #51245 [Com]: Bug in filter_var with SimpleXMLElement

From: Date: Tue, 09 Mar 2010 12:02:34 +0000
Subject: Bug #51245 [Com]: Bug in filter_var with SimpleXMLElement
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-148428@lists.php.net to get a copy of this message
Edit report at http://bugs.php.net/bug.php?id=51245&edit=1

 ID:               51245
 Comment by:       
 Reported by:      a dot dorn at sitesol dot de
 Summary:          Bug in filter_var with SimpleXMLElement
 Status:           Feedback
 Type:             Bug
 Package:          Unknown/Other Function
 Operating System: WIN
 PHP Version:      5.2.13

 New Comment:

Here is the small script:

$xmlstring = '<?xml version="1.0"
encoding="iso-8859-1"?'.'><file
ext="png">
    <user id="XXX"/>
</file>';

$xml = simplexml_load_string($xmlstring);

echo var_dump(filter_var($xml["ext"], FILTER_SANITIZE_STRING));


Previous Comments:
------------------------------------------------------------------------
[2010-03-09 12:59:47] a dot dorn at sitesol dot de

the behavior in php 5.3.2 is the expected

string(3) "png"

:-)

will you offer a bugfix for php version 5.2.x?

------------------------------------------------------------------------
[2010-03-09 12:45:35] a dot dorn at sitesol dot de

***problematic code:
echo var_dump(filter_var($xml["ext"], FILTER_SANITIZE_STRING));

***expected result (by version 5.2.1):
string(3) "png"

***result by version 5.2.12 and 5.2.13
bool(false)

------------------------------------------------------------------------
[2010-03-09 11:51:00] pajoye@php.net

I don't see a difference betweeen the expected and actual results. Also
if there is a problem with filter_var and __toString, please provide a
simple script to reproduce it (small class + filter_var only).

Also try using 5.3.2 as I have fixed something related to toString
there.

------------------------------------------------------------------------
[2010-03-09 11:36:02] a dot dorn at sitesol dot de

Description:
------------
In 5.2.1 we always received the string 'png' in example 2. It seems that
filter_var does not call the "__toString" (or something similar) Method
at least for SimpleXMLElement objects.

Example 3 is working correctly.



Test script:
---------------
class Benutzer
 {
     protected $name;
     public function __construct( $name )
      {
         $this->name = $name;
     }
     public function __toString()
     {
         return $this->name;
     }
 }
$benutzer = new Benutzer( 'TEST' );


$xmlstring = '<?xml version="1.0"
encoding="iso-8859-1"?'.'><file
uuid="samplefile_1234234646sdfsdf" 

name="openengine_logo" ext="png" status="released"
action="update">
    <meta>
        <attribute key="title" value="Download A"/>
        <attribute key="product_name" value="Product A"/>
        <attribute key="product_name" value="Product B"/>
        <attribute key="product_name" value="Product C"/>
        <attribute key="product_family" value="Product Family A"/>
        <attribute key="product_version" value="1.0"/>
        <attribute key="group_main" value="Group A"/>
        <attribute key="group_sub" value="Group B"/>
        <attribute key="document_type" value="Image"/>
        <attribute key="document_type" value="Video"/>
        <attribute key="document_type" value="Audio"/>
        <attribute key="language" value="en"/>
        <attribute key="language" value="de"/>
        <attribute key="description" value="This is a sample file"/>
        <attribute key="release_date" value="2003-06-04T12:30:17"/>
    </meta>
    <auth folder="YYY"/>
    <user id="XXX"/>
</file>';

$xml = simplexml_load_string($xmlstring);

echo "\n###################################################\n";
echo "Testing filter_var with SimpleXMLElement Object\n";
echo "\n###################################################\n";


echo "\nExample 1";
echo "\n----------------------------\n";
echo "DUMP XML Attribute\n\n";
echo "Output:\n";
echo $xml["ext"];
echo "\n----------------------------\n";

echo "\nExample 2";
echo "\n----------------------------\n";
echo "Output filter_var\n\n";
echo "Result:\n";
echo var_dump(filter_var($xml["ext"], FILTER_SANITIZE_STRING));
echo "\n\nPROBLEM: in former versions as 5.2.1 result has been 'png'";
echo "\n----------------------------\n";

echo "\nExample 3";
echo "\n----------------------------\n";
echo "Output filter_var with active type switching\n\n";
echo "Result:\n";
echo var_dump(filter_var((string) $xml["ext"],
FILTER_SANITIZE_STRING));
echo "\n----------------------------\n";

echo "\nExample 4";
echo "\n----------------------------\n";
echo "Output user object with __toString Method\n\n";
echo "Result:\n";
echo var_dump(filter_var($benutzer, FILTER_SANITIZE_STRING));
echo "\n----------------------------\n";

Expected result:
----------------
###################################################
Testing filter_var with SimpleXMLElement Objects

###################################################

Example 1
----------------------------
DUMP XML Attribute

Output:
png
----------------------------

Example 2
----------------------------
Output filter_var

Result:
string(3) "png"


PROBLEM: in former versions as 5.2.1 result has been 'png'
----------------------------

Example 3
----------------------------
Output filter_var with active type switching

Result:
string(3) "png"

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

Example 4
----------------------------
Output user object with __toString Method

Result:
string(4) "TEST"

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


Actual result:
--------------
###################################################
Testing filter_var with SimpleXMLElement Objects

###################################################

Example 1
----------------------------
DUMP XML Attribute

Output:
png
----------------------------

Example 2
----------------------------
Output filter_var

Result:
bool(false)


PROBLEM: in former versions as 5.2.1 result has been 'png'
----------------------------

Example 3
----------------------------
Output filter_var with active type switching

Result:
string(3) "png"

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

Example 4
----------------------------
Output user object with __toString Method

Result:
string(4) "TEST"

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



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



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


Thread (9 messages)

« previous php.bugs (#148428) next »