diff options
author | 2016-03-23 14:59:14 -0700 | |
---|---|---|
committer | 2016-03-23 15:28:41 -0700 | |
commit | 7cc736da82b814b383daaa59609372917fd004cd (patch) | |
tree | abe8a3963e9fb282f53562cadd85823d44ad55d3 | |
parent | 7c891700995276c9f6952d0e1f2a2c1882d66f3d (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
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); + } } |