pajoye                                   Sat, 05 Sep 2009 17:35:26 +0000

Revision: http://svn.php.net/viewvc?view=revision&revision=288083

Log:
- fix #49274, filter_var does not accept object without a toString 
implementation

Bug: http://bugs.php.net/49274 (Analyzed) filter_var() should accept objects 
without fatal error
      
Changed paths:
    U   php/php-src/branches/PHP_5_2/ext/filter/filter.c
    A   php/php-src/branches/PHP_5_2/ext/filter/tests/bug49274.phpt
    U   php/php-src/branches/PHP_5_3/ext/filter/filter.c
    A   php/php-src/branches/PHP_5_3/ext/filter/tests/bug49274.phpt
    U   php/php-src/trunk/ext/filter/filter.c
    A   php/php-src/trunk/ext/filter/tests/bug49274.phpt

Modified: php/php-src/branches/PHP_5_2/ext/filter/filter.c
===================================================================
--- php/php-src/branches/PHP_5_2/ext/filter/filter.c    2009-09-05 17:11:44 UTC 
(rev 288082)
+++ php/php-src/branches/PHP_5_2/ext/filter/filter.c    2009-09-05 17:35:26 UTC 
(rev 288083)
@@ -316,6 +316,19 @@
        if (copy) {
                SEPARATE_ZVAL(value);
        }
+
+       /* #49274, fatal error with object without a toString method
+         Fails nicely instead of getting a recovarable fatal error. */
+       if (Z_TYPE_PP(value) == IS_OBJECT) {
+               zend_class_entry *ce;
+
+               ce = Z_OBJCE_PP(value);
+               if (!ce->__tostring) {
+                       ZVAL_FALSE(*value);
+                       return;
+               }
+       }
+
        /* Here be strings */
        convert_to_string(*value);


Added: php/php-src/branches/PHP_5_2/ext/filter/tests/bug49274.phpt
===================================================================
--- php/php-src/branches/PHP_5_2/ext/filter/tests/bug49274.phpt                 
        (rev 0)
+++ php/php-src/branches/PHP_5_2/ext/filter/tests/bug49274.phpt 2009-09-05 
17:35:26 UTC (rev 288083)
@@ -0,0 +1,10 @@
+--TEST--
+#49274, fatal error when an object does not implement toString
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var(new stdClass, FILTER_VALIDATE_EMAIL));
+?>
+--EXPECTF--
+bool(false)

Modified: php/php-src/branches/PHP_5_3/ext/filter/filter.c
===================================================================
--- php/php-src/branches/PHP_5_3/ext/filter/filter.c    2009-09-05 17:11:44 UTC 
(rev 288082)
+++ php/php-src/branches/PHP_5_3/ext/filter/filter.c    2009-09-05 17:35:26 UTC 
(rev 288083)
@@ -365,6 +365,19 @@
        if (copy) {
                SEPARATE_ZVAL(value);
        }
+
+       /* #49274, fatal error with object without a toString method
+         Fails nicely instead of getting a recovarable fatal error. */
+       if (Z_TYPE_PP(value) == IS_OBJECT) {
+               zend_class_entry *ce;
+
+               ce = Z_OBJCE_PP(value);
+               if (!ce->__tostring) {
+                       ZVAL_FALSE(*value);
+                       return;
+               }
+       }
+
        /* Here be strings */
        convert_to_string(*value);


Added: php/php-src/branches/PHP_5_3/ext/filter/tests/bug49274.phpt
===================================================================
--- php/php-src/branches/PHP_5_3/ext/filter/tests/bug49274.phpt                 
        (rev 0)
+++ php/php-src/branches/PHP_5_3/ext/filter/tests/bug49274.phpt 2009-09-05 
17:35:26 UTC (rev 288083)
@@ -0,0 +1,10 @@
+--TEST--
+#49274, fatal error when an object does not implement toString
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var(new stdClass, FILTER_VALIDATE_EMAIL));
+?>
+--EXPECTF--
+bool(false)

Modified: php/php-src/trunk/ext/filter/filter.c
===================================================================
--- php/php-src/trunk/ext/filter/filter.c       2009-09-05 17:11:44 UTC (rev 
288082)
+++ php/php-src/trunk/ext/filter/filter.c       2009-09-05 17:35:26 UTC (rev 
288083)
@@ -379,6 +379,19 @@
        if (copy) {
                SEPARATE_ZVAL(value);
        }
+
+       /* #49274, fatal error with object without a toString method
+         Fails nicely instead of getting a recovarable fatal error. */
+       if (Z_TYPE_PP(value) == IS_OBJECT) {
+               zend_class_entry *ce;
+
+               ce = Z_OBJCE_PP(value);
+               if (!ce->__tostring) {
+                       ZVAL_FALSE(*value);
+                       return;
+               }
+       }
+
        /* Here be strings */
        convert_to_string(*value);


Added: php/php-src/trunk/ext/filter/tests/bug49274.phpt
===================================================================
--- php/php-src/trunk/ext/filter/tests/bug49274.phpt                            
(rev 0)
+++ php/php-src/trunk/ext/filter/tests/bug49274.phpt    2009-09-05 17:35:26 UTC 
(rev 288083)
@@ -0,0 +1,10 @@
+--TEST--
+#49274, fatal error when an object does not implement toString
+--SKIPIF--
+<?php if (!extension_loaded("filter")) die("skip"); ?>
+--FILE--
+<?php
+var_dump(filter_var(new stdClass, FILTER_VALIDATE_EMAIL));
+?>
+--EXPECTF--
+bool(false)

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to