diff --git a/core/java/android/security/net/config/XmlConfigSource.java b/core/java/android/security/net/config/XmlConfigSource.java index d57d0f5611817..4a5f827da1293 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 0000000000000..5d23d36e1dbfa --- /dev/null +++ b/tests/NetworkSecurityConfigTest/res/xml/domain_whitespace.xml @@ -0,0 +1,11 @@ + + + + android.com + + developer.android.com + + 7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y= + + + diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/XmlConfigTests.java index 10bcc18a0019b..f7066a6f45f60 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); + } }