summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Chad Brubaker <cbrubaker@google.com> 2016-03-23 14:59:14 -0700
committer Chad Brubaker <cbrubaker@google.com> 2016-03-23 15:28:41 -0700
commit7cc736da82b814b383daaa59609372917fd004cd (patch)
treeabe8a3963e9fb282f53562cadd85823d44ad55d3
parent7c891700995276c9f6952d0e1f2a2c1882d66f3d (diff)
Properly handle whitespace in domain entries
Domain entries can contain whitespace (or newlines) which should be ignored to avoid unexpectedly failing to match a domain. Bug: 27816377 Change-Id: I3691aa4abd409e7be97ad0cf1eb0195725e1b0ab
-rw-r--r--core/java/android/security/net/config/XmlConfigSource.java4
-rw-r--r--tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml11
-rw-r--r--tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java12
3 files changed, 25 insertions, 2 deletions
diff --git a/core/java/android/security/net/config/XmlConfigSource.java b/core/java/android/security/net/config/XmlConfigSource.java
index d57d0f561181..4a5f827da129 100644
--- a/core/java/android/security/net/config/XmlConfigSource.java
+++ b/core/java/android/security/net/config/XmlConfigSource.java
@@ -111,7 +111,7 @@ public class XmlConfigSource implements ConfigSource {
if (parser.next() != XmlPullParser.TEXT) {
throw new ParserException(parser, "Missing pin digest");
}
- String digest = parser.getText();
+ String digest = parser.getText().trim();
byte[] decodedDigest = null;
try {
decodedDigest = Base64.decode(digest, 0);
@@ -168,7 +168,7 @@ public class XmlConfigSource implements ConfigSource {
if (parser.next() != XmlPullParser.TEXT) {
throw new ParserException(parser, "Domain name missing");
}
- String domain = parser.getText().toLowerCase(Locale.US);
+ String domain = parser.getText().trim().toLowerCase(Locale.US);
if (parser.next() != XmlPullParser.END_TAG) {
throw new ParserException(parser, "domain contains additional elements");
}
diff --git a/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml b/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml
new file mode 100644
index 000000000000..5d23d36e1dbf
--- /dev/null
+++ b/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<network-security-config>
+ <domain-config>
+ <domain>android.com
+ </domain>
+ <domain> developer.android.com </domain>
+ <pin-set>
+ <pin digest="SHA-256"> 7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y= </pin>
+ </pin-set>
+ </domain-config>
+</network-security-config>
diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java
index 10bcc18a0019..f7066a6f45f6 100644
--- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java
+++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java
@@ -464,4 +464,16 @@ public class XmlConfigTests extends AndroidTestCase {
} catch (RuntimeException expected) {
}
}
+
+ public void testDomainWhitespaceTrimming() throws Exception {
+ XmlConfigSource source =
+ new XmlConfigSource(getContext(), R.xml.domain_whitespace, false);
+ ApplicationConfig appConfig = new ApplicationConfig(source);
+ NetworkSecurityConfig defaultConfig = appConfig.getConfigForHostname("");
+ MoreAsserts.assertNotEqual(defaultConfig, appConfig.getConfigForHostname("developer.android.com"));
+ MoreAsserts.assertNotEqual(defaultConfig, appConfig.getConfigForHostname("android.com"));
+ SSLContext context = TestUtils.getSSLContext(source);
+ TestUtils.assertConnectionSucceeds(context, "android.com", 443);
+ TestUtils.assertConnectionSucceeds(context, "developer.android.com", 443);
+ }
}