dmitry          Tue Mar 31 10:02:40 2009 UTC

  Added files:                 (Branch: PHP_5_3)
    /php-src/ext/filter/tests   bug47745.phpt 

  Modified files:              
    /php-src    NEWS 
    /php-src/ext/filter logical_filters.c 
  Log:
  Fixed bug #47745 (FILTER_VALIDATE_INT doesn't allow minimum integer)
  
  
http://cvs.php.net/viewvc.cgi/php-src/NEWS?r1=1.2027.2.547.2.965.2.545&r2=1.2027.2.547.2.965.2.546&diff_format=u
Index: php-src/NEWS
diff -u php-src/NEWS:1.2027.2.547.2.965.2.545 
php-src/NEWS:1.2027.2.547.2.965.2.546
--- php-src/NEWS:1.2027.2.547.2.965.2.545       Mon Mar 30 13:57:01 2009
+++ php-src/NEWS        Tue Mar 31 10:02:39 2009
@@ -10,6 +10,8 @@
   (Matteo)
 - Fixed bug #47771 (Exception during object construction from arg call calls
   object's destructor). (Dmitry)
+- Fixed bug #47745 (FILTER_VALIDATE_INT doesn't allow minimum integer).
+  (Dmitry)
 - Fixed bug #47714 (autoloading classes inside exception_handler leads to
   crashes). (Dmitry)
 - Fixed bug #47699 (autoload and late static binding). (Dmitry)
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/logical_filters.c?r1=1.1.2.22.2.9&r2=1.1.2.22.2.10&diff_format=u
Index: php-src/ext/filter/logical_filters.c
diff -u php-src/ext/filter/logical_filters.c:1.1.2.22.2.9 
php-src/ext/filter/logical_filters.c:1.1.2.22.2.10
--- php-src/ext/filter/logical_filters.c:1.1.2.22.2.9   Wed Mar 25 18:51:44 2009
+++ php-src/ext/filter/logical_filters.c        Tue Mar 31 10:02:39 2009
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: logical_filters.c,v 1.1.2.22.2.9 2009/03/25 18:51:44 iliaa Exp $ */
+/* $Id: logical_filters.c,v 1.1.2.22.2.10 2009/03/31 10:02:39 dmitry Exp $ */
 
 #include "php_filter.h"
 #include "filter_private.h"
@@ -70,14 +70,12 @@
 
 static int php_filter_parse_int(const char *str, unsigned int str_len, long 
*ret TSRMLS_DC) { /* {{{ */
        long ctx_value;
-       long sign = 1;
+       long sign = 0;
        const char *end = str + str_len;
-       double dval;
-       long overflow;
 
        switch (*str) {
                case '-':
-                       sign = -1;
+                       sign = 1;
                case '+':
                        str++;
                default:
@@ -91,22 +89,29 @@
                return -1;
        }
 
+       if ((end - str > MAX_LENGTH_OF_LONG - 1) /* number too long */
+        || (SIZEOF_LONG == 4 && end - str == MAX_LENGTH_OF_LONG - 1 && *str > 
'2')) {
+               /* overflow */
+               return -1;
+       }
+
        while (str < end) {
                if (*str >= '0' && *str <= '9') {
-                       ZEND_SIGNED_MULTIPLY_LONG(ctx_value, 10, ctx_value, 
dval, overflow);
-                       if (overflow) {
-                               return -1;
-                       }
-                       ctx_value += ((*(str++)) - '0');
-                       if (ctx_value & LONG_SIGN_MASK) {
-                               return -1;
-                       }
+                       ctx_value = (ctx_value * 10) + (*(str++) - '0');        
                                                        \
                } else {
                        return -1;
                }
        }
+       if (sign) {
+               ctx_value = -ctx_value;
+               if (ctx_value > 0) { /* overflow */
+                       return -1;
+               }
+       } else if (ctx_value < 0) { /* overflow */
+               return -1;
+       }
 
-       *ret = ctx_value * sign;
+       *ret = ctx_value;
        return 1;
 }
 /* }}} */

http://cvs.php.net/viewvc.cgi/php-src/ext/filter/tests/bug47745.phpt?view=markup&rev=1.1
Index: php-src/ext/filter/tests/bug47745.phpt
+++ php-src/ext/filter/tests/bug47745.phpt



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

Reply via email to