You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2019/06/05 09:09:09 UTC

[httpcomponents-client] branch master updated: HTTPCLIENT-1991: incorrect handling of non-standard DNS entries by PublicSuffixMatcher

This is an automated email from the ASF dual-hosted git repository.

olegk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/httpcomponents-client.git


The following commit(s) were added to refs/heads/master by this push:
     new 1afa421  HTTPCLIENT-1991: incorrect handling of non-standard DNS entries by PublicSuffixMatcher
1afa421 is described below

commit 1afa421f6f4dc2ba29c86cbf1a2c8c83352a60b9
Author: Oleg Kalnichevski <ol...@apache.org>
AuthorDate: Sat Jun 1 15:43:24 2019 +0200

    HTTPCLIENT-1991: incorrect handling of non-standard DNS entries by PublicSuffixMatcher
---
 .../hc/client5/http/psl/PublicSuffixMatcher.java   | 22 ++++++++++------------
 .../impl/cookie/TestPublicSuffixListParser.java    |  2 +-
 .../http/psl/TestPublicSuffixListParser.java       |  2 +-
 .../client5/http/psl/TestPublicSuffixMatcher.java  |  4 ++--
 httpclient5/src/test/resources/suffixlist.txt      |  1 +
 5 files changed, 15 insertions(+), 16 deletions(-)

diff --git a/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java b/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java
index 9b7dd57..4ddaf00 100644
--- a/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java
+++ b/httpclient5/src/main/java/org/apache/hc/client5/http/psl/PublicSuffixMatcher.java
@@ -147,17 +147,17 @@ public final class PublicSuffixMatcher {
         if (domain.startsWith(".")) {
             return null;
         }
-        String domainName = null;
-        String segment = domain.toLowerCase(Locale.ROOT);
+        final String normalized = domain.toLowerCase(Locale.ROOT);
+        String segment = normalized;
+        String result = null;
         while (segment != null) {
-
             // An exception rule takes priority over any other matching rule.
-            if (hasException(IDN.toUnicode(segment), expectedType)) {
+            final String key = IDN.toUnicode(segment);
+            if (hasException(key, expectedType)) {
                 return segment;
             }
-
-            if (hasRule(IDN.toUnicode(segment), expectedType)) {
-                break;
+            if (hasRule(key, expectedType)) {
+                return result;
             }
 
             final int nextdot = segment.indexOf('.');
@@ -165,15 +165,13 @@ public final class PublicSuffixMatcher {
 
             if (nextSegment != null) {
                 if (hasRule("*." + IDN.toUnicode(nextSegment), expectedType)) {
-                    break;
+                    return result;
                 }
             }
-            if (nextdot != -1) {
-                domainName = segment;
-            }
+            result = segment;
             segment = nextSegment;
         }
-        return domainName;
+        return normalized;
     }
 
     /**
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/cookie/TestPublicSuffixListParser.java b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/cookie/TestPublicSuffixListParser.java
index d475221..ea84edf 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/impl/cookie/TestPublicSuffixListParser.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/impl/cookie/TestPublicSuffixListParser.java
@@ -111,7 +111,7 @@ public class TestPublicSuffixListParser {
 
         cookie.setDomain(".blah");
         cookie.setAttribute(Cookie.DOMAIN_ATTR, ".blah");
-        Assert.assertFalse(filter.match(cookie, new CookieOrigin("somehost.blah", 80, "/stuff", false)));
+        Assert.assertTrue(filter.match(cookie, new CookieOrigin("somehost.blah", 80, "/stuff", false)));
     }
 
     @Test
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixListParser.java b/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixListParser.java
index 18ae302..2699c5e 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixListParser.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixListParser.java
@@ -52,7 +52,7 @@ public class TestPublicSuffixListParser {
             in.close();
         }
         Assert.assertNotNull(suffixList);
-        Assert.assertEquals(Arrays.asList("jp", "ac.jp", "*.tokyo.jp", "no", "h\u00E5.no"), suffixList.getRules());
+        Assert.assertEquals(Arrays.asList("xx", "jp", "ac.jp", "*.tokyo.jp", "no", "h\u00E5.no"), suffixList.getRules());
         Assert.assertEquals(Arrays.asList("metro.tokyo.jp"), suffixList.getExceptions());
     }
 
diff --git a/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixMatcher.java b/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixMatcher.java
index 7bc9914..bf6a2e6 100644
--- a/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixMatcher.java
+++ b/httpclient5/src/test/java/org/apache/hc/client5/http/psl/TestPublicSuffixMatcher.java
@@ -63,13 +63,13 @@ public class TestPublicSuffixMatcher {
         Assert.assertEquals("example.xx", matcher.getDomainRoot("www.blah.blah.example.XX"));
         Assert.assertEquals(null, matcher.getDomainRoot("xx"));
         Assert.assertEquals(null, matcher.getDomainRoot("jp"));
-        Assert.assertEquals(null, matcher.getDomainRoot("example"));
-        Assert.assertEquals("example.example", matcher.getDomainRoot("example.example"));
         Assert.assertEquals(null, matcher.getDomainRoot("ac.jp"));
         Assert.assertEquals(null, matcher.getDomainRoot("any.tokyo.jp"));
         Assert.assertEquals("metro.tokyo.jp", matcher.getDomainRoot("metro.tokyo.jp"));
         Assert.assertEquals("blah.blah.tokyo.jp", matcher.getDomainRoot("blah.blah.tokyo.jp"));
         Assert.assertEquals("blah.ac.jp", matcher.getDomainRoot("blah.blah.ac.jp"));
+        Assert.assertEquals("garbage", matcher.getDomainRoot("garbage"));
+        Assert.assertEquals("garbage.garbage", matcher.getDomainRoot("garbage.garbage"));
     }
 
     @Test
diff --git a/httpclient5/src/test/resources/suffixlist.txt b/httpclient5/src/test/resources/suffixlist.txt
index f5ff283..6aa880c 100644
--- a/httpclient5/src/test/resources/suffixlist.txt
+++ b/httpclient5/src/test/resources/suffixlist.txt
@@ -23,6 +23,7 @@
 // <http://www.apache.org/>.
 //
 
+xx
 jp
 ac.jp
 *.tokyo.jp