Skip to content

Commit 491f169

Browse files
Handle legacy persisted domain mappings safely (#703)
Co-authored-by: James Newman <james.newman@rokt.com>
1 parent f4ceca7 commit 491f169

3 files changed

Lines changed: 52 additions & 5 deletions

File tree

android-core/src/main/java/com/mparticle/networking/DomainMapping.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ private static Builder withJson(String jsonString) {
326326
JSONObject jsonObject = new JSONObject(jsonString);
327327
int type = jsonObject.getInt("mType");
328328
String newUrl = jsonObject.getString("url");
329-
boolean overridesSubdirectory = jsonObject.getBoolean("overridesSubdirectory");
329+
boolean overridesSubdirectory = jsonObject.optBoolean("overridesSubdirectory", false);
330330
Builder builder = new Builder(Endpoint.parseInt(type), newUrl, overridesSubdirectory);
331331
JSONArray certificatesJsonArray = jsonObject.getJSONArray("mCertificates");
332332
for (int i = 0; i < certificatesJsonArray.length(); i++) {
@@ -339,4 +339,4 @@ private static Builder withJson(String jsonString) {
339339
return null;
340340
}
341341
}
342-
}
342+
}

android-core/src/main/java/com/mparticle/networking/NetworkOptions.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,12 @@ public static NetworkOptions withNetworkOptions(@Nullable String jsonString) {
7777
}
7878
JSONArray domainMappingsJson = jsonObject.getJSONArray("domainMappings");
7979
for (int i = 0; i < domainMappingsJson.length(); i++) {
80-
builder.addDomainMapping(DomainMapping
81-
.withDomainMapping(domainMappingsJson.getString(i))
82-
.build());
80+
DomainMapping.Builder domainMappingBuilder = DomainMapping.withDomainMapping(domainMappingsJson.getString(i));
81+
if (domainMappingBuilder == null) {
82+
Logger.warning("NetworkOptions: skipping invalid persisted domain mapping at index " + i + ".");
83+
continue;
84+
}
85+
builder.addDomainMapping(domainMappingBuilder.build());
8386
}
8487
} catch (Exception e) {
8588
Logger.error(e);

android-core/src/test/kotlin/com/mparticle/networking/NetworkOptionsTest.kt

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,50 @@ class NetworkOptionsTest {
4747
Assert.assertTrue(equals(options, optionsDeserialized))
4848
}
4949

50+
@Test
51+
fun testLegacyDomainMappingWithoutOverridesSubdirectoryParses() {
52+
val options =
53+
NetworkOptions.withNetworkOptions(
54+
"""
55+
{
56+
"disableDevPinning": false,
57+
"disablePinning": false,
58+
"domainMappings": [
59+
"{\"mType\":1,\"url\":\"www.configUrl.com\",\"mCertificates\":[]}"
60+
]
61+
}
62+
""".trimIndent(),
63+
)
64+
65+
Assert.assertNotNull(options)
66+
Assert.assertNotNull(options!!.configDomain)
67+
Assert.assertFalse(options.configDomain!!.isOverridesSubdirectory)
68+
Assert.assertEquals("www.configUrl.com", options.configDomain!!.url)
69+
}
70+
71+
@Test
72+
fun testNetworkOptionsSkipsInvalidPersistedDomainMappings() {
73+
val options =
74+
NetworkOptions.withNetworkOptions(
75+
"""
76+
{
77+
"disableDevPinning": false,
78+
"disablePinning": false,
79+
"domainMappings": [
80+
"{\"mType\":1,\"url\":\"www.configUrl.com\",\"overridesSubdirectory\":true,\"mCertificates\":[]}",
81+
"{\"mType\":1,\"url\":\"www.invalid.com\""
82+
]
83+
}
84+
""".trimIndent(),
85+
)
86+
87+
Assert.assertNotNull(options)
88+
Assert.assertNotNull(options!!.configDomain)
89+
Assert.assertEquals(1, options.domainMappings.size)
90+
Assert.assertTrue(options.configDomain!!.isOverridesSubdirectory)
91+
Assert.assertEquals("www.configUrl.com", options.configDomain!!.url)
92+
}
93+
5094
companion object {
5195
fun equals(
5296
networkOptions1: NetworkOptions,

0 commit comments

Comments
 (0)