felipe          Wed Dec 31 15:39:48 2008 UTC

  Added files:                 (Branch: PHP_5_2)
    /php-src/ext/filter/tests   bug46973.phpt 

  Modified files:              
    /php-src/ext/filter logical_filters.c 
  Log:
  - MFH: Fixed bug #46973 (IPv6 address filter rejects valid address)
  
http://cvs.php.net/viewvc.cgi/php-src/ext/filter/logical_filters.c?r1=1.1.2.26&r2=1.1.2.27&diff_format=u
Index: php-src/ext/filter/logical_filters.c
diff -u php-src/ext/filter/logical_filters.c:1.1.2.26 
php-src/ext/filter/logical_filters.c:1.1.2.27
--- php-src/ext/filter/logical_filters.c:1.1.2.26       Wed Dec 31 11:17:37 2008
+++ php-src/ext/filter/logical_filters.c        Wed Dec 31 15:39:48 2008
@@ -17,7 +17,7 @@
   +----------------------------------------------------------------------+
 */
 
-/* $Id: logical_filters.c,v 1.1.2.26 2008/12/31 11:17:37 sebastian Exp $ */
+/* $Id: logical_filters.c,v 1.1.2.27 2008/12/31 15:39:48 felipe Exp $ */
 
 #include "php_filter.h"
 #include "filter_private.h"
@@ -526,7 +526,7 @@
        int compressed = 0;
        int blocks = 8;
        int n;
-       char *ipv4;
+       char *ipv4 = NULL;
        char *end;
        int ip4elm[4];
        char *s = str;
@@ -552,20 +552,24 @@
                blocks = 6;
        }
 
-       end = str + str_len;
+       end = ipv4 ? ipv4 : str + str_len;
+
        while (str < end) {
                if (*str == ':') {
                        if (--blocks == 0) {
+                               if ((str+1) == end && ipv4) {
+                                       return 1;
+                               }
                                return 0;
                        }                       
                        if (++str >= end) {
-                               return 0;
+                               return (ipv4 && ipv4 == str && blocks == 3) || 
0;
                        }
                        if (*str == ':') {
                                if (compressed || --blocks == 0) {
-                                       return 0;
+                                       return ipv4 != NULL;
                                }                       
-                               if (++str == end) {
+                               if (++str == end || (ipv4 && ipv4 == str)) {
                                        return 1;
                                }
                                compressed = 1;

http://cvs.php.net/viewvc.cgi/php-src/ext/filter/tests/bug46973.phpt?view=markup&rev=1.1
Index: php-src/ext/filter/tests/bug46973.phpt
+++ php-src/ext/filter/tests/bug46973.phpt
--TEST--
Bug #46973 (IPv6 address filter rejects valid address)
--FILE--
<?php

var_dump(filter_var('1fff::a88:85a3::172.31.128.1', 
FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
var_dump(filter_var('3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344', 
FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
var_dump(filter_var('1fff::a88:85a3::172.31.128.1', 
FILTER_VALIDATE_IP,FILTER_FLAG_IPV6));
 
?>
--EXPECTF--
string(28) "1fff::a88:85a3::172.31.128.1"
string(39) "3ffe:6a88:85a3:08d3:1319:8a2e:0370:7344"
string(28) "1fff::a88:85a3::172.31.128.1"



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

Reply via email to