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