Просмотр исходного кода

ZF-11334
Fix detection of IPv6 addresses in Zend_Validate_Hostname::isValid


git-svn-id: http://framework.zend.com/svn/framework/standard/trunk@23900 44c647ce-9c0f-0410-b52a-842ac1e357ba

adamlundrigan 14 лет назад
Родитель
Сommit
4e9554ee29
2 измененных файлов с 21 добавлено и 1 удалено
  1. 3 1
      library/Zend/Validate/Hostname.php
  2. 18 0
      tests/Zend/Validate/HostnameTest.php

+ 3 - 1
library/Zend/Validate/Hostname.php

@@ -495,6 +495,7 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
      */
      */
     public function isValid($value)
     public function isValid($value)
     {
     {
+
         if (!is_string($value)) {
         if (!is_string($value)) {
             $this->_error(self::INVALID);
             $this->_error(self::INVALID);
             return false;
             return false;
@@ -502,7 +503,8 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract
 
 
         $this->_setValue($value);
         $this->_setValue($value);
         // Check input against IP address schema
         // Check input against IP address schema
-        if (preg_match('/^[0-9.a-e:.]*$/i', $value) &&
+        
+        if (preg_match('/^[0-9a-f:.]*$/i', $value) &&
             $this->_options['ip']->setTranslator($this->getTranslator())->isValid($value)) {
             $this->_options['ip']->setTranslator($this->getTranslator())->isValid($value)) {
             if (!($this->_options['allow'] & self::ALLOW_IP)) {
             if (!($this->_options['allow'] & self::ALLOW_IP)) {
                 $this->_error(self::IP_ADDRESS_NOT_ALLOWED);
                 $this->_error(self::IP_ADDRESS_NOT_ALLOWED);

+ 18 - 0
tests/Zend/Validate/HostnameTest.php

@@ -412,4 +412,22 @@ class Zend_Validate_HostnameTest extends PHPUnit_Framework_TestCase
         $this->assertFalse($this->_validator->isValid('example.com..'));
         $this->assertFalse($this->_validator->isValid('example.com..'));
         $this->assertFalse($this->_validator->isValid('1.2.3.4.'));
         $this->assertFalse($this->_validator->isValid('1.2.3.4.'));
     }
     }
+    
+    /**
+     * @group ZF-11334
+     * @see http://www.ietf.org/rfc/rfc2732.txt
+     */
+    public function testSupportsIpv6AddressesWhichContainHexDigitF()
+    {
+        $validator = new Zend_Validate_Hostname(Zend_Validate_Hostname::ALLOW_ALL);
+        
+        $this->assertTrue($validator->isValid('FEDC:BA98:7654:3210:FEDC:BA98:7654:3210'));
+        $this->assertTrue($validator->isValid('1080:0:0:0:8:800:200C:417A'));
+        $this->assertTrue($validator->isValid('3ffe:2a00:100:7031::1'));
+        $this->assertTrue($validator->isValid('1080::8:800:200C:417A'));
+        $this->assertTrue($validator->isValid('::192.9.5.5'));
+        $this->assertTrue($validator->isValid('::FFFF:129.144.52.38'));
+        $this->assertTrue($validator->isValid('2010:836B:4179::836B:4179'));
+    }
+
 }
 }