Skip to content

Commit 1dc4377

Browse files
icbakerSheenaChhabra
authored andcommitted
Stop double-encoding CMCD query parameters
`Uri.appendQueryParameter` is documented to encode its arguments, so calling `Uri.encode` beforehand results in double-encoding. Issue: #1075 #minor-release PiperOrigin-RevId: 604995441 (cherry picked from commit 7ebfed5)
1 parent 245e623 commit 1dc4377

File tree

6 files changed

+12
-15
lines changed

6 files changed

+12
-15
lines changed

‎RELEASENOTES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
* Fix the regex used for validating custom Common Media Client Data (CMCD)
1111
key names by modifying it to only check for hyphen
1212
([#1028](https://github.com/androidx/media/issues/1028)).
13+
* Stop double-encoding CMCD query parameters
14+
([#1075](https://github.com/androidx/media/issues/1075)).
1315
* Transformer:
1416
* Track Selection:
1517
* Extractors:

‎libraries/exoplayer/src/main/java/androidx/media3/exoplayer/upstream/CmcdData.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,8 +417,7 @@ public DataSpec addToDataSpec(DataSpec dataSpec) {
417417
.uri
418418
.buildUpon()
419419
.appendQueryParameter(
420-
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY,
421-
Uri.encode(COMMA_JOINER.join(keyValuePairs)));
420+
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY, COMMA_JOINER.join(keyValuePairs));
422421
return dataSpec.buildUpon().setUri(uriBuilder.build()).build();
423422
}
424423
}

‎libraries/exoplayer/src/test/java/androidx/media3/exoplayer/upstream/CmcdDataTest.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public void createInstance_populatesCmcdHttpQueryParameters() {
108108
getCustomData() {
109109
return new ImmutableListMultimap.Builder<String, String>()
110110
.put("CMCD-Object", "key-1=1")
111-
.put("CMCD-Request", "key-2=\"stringValue1,stringValue2\"")
111+
.put("CMCD-Request", "key-2=\"stringVälue1,stringVälue2\"")
112112
.build();
113113
}
114114

@@ -143,11 +143,13 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
143143

144144
dataSpec = cmcdData.addToDataSpec(dataSpec);
145145

146-
assertThat(
147-
Uri.decode(dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
146+
// Confirm that the values above are URL-encoded
147+
assertThat(dataSpec.uri.toString()).doesNotContain("ä");
148+
assertThat(dataSpec.uri.toString()).contains(Uri.encode("ä"));
149+
assertThat(dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
148150
.isEqualTo(
149151
"bl=1800,br=840,bs,cid=\"mediaId\",d=3000,dl=900,key-1=1,"
150-
+ "key-2=\"stringValue1,stringValue2\",mtp=500,pr=2.00,rtp=1700,sf=d,"
152+
+ "key-2=\"stringVälue1,stringVälue2\",mtp=500,pr=2.00,rtp=1700,sf=d,"
151153
+ "sid=\"sessionId\",st=l,su,tb=1000");
152154
}
153155

‎libraries/exoplayer_dash/src/test/java/androidx/media3/exoplayer/dash/DefaultDashChunkSourceTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -532,9 +532,7 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
532532
output);
533533

534534
assertThat(
535-
Uri.decode(
536-
output.chunk.dataSpec.uri.getQueryParameter(
537-
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
535+
output.chunk.dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
538536
.isEqualTo(
539537
"bl=0,br=700,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0,"
540538
+ "key-2=\"stringValue\",mtp=1000,nor=\"..%2Fvideo_4000_700000.m4s\",nrr=\"0-\","

‎libraries/exoplayer_hls/src/test/java/androidx/media3/exoplayer/hls/HlsChunkSourceTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -442,9 +442,7 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
442442
output);
443443

444444
assertThat(
445-
Uri.decode(
446-
output.chunk.dataSpec.uri.getQueryParameter(
447-
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
445+
output.chunk.dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
448446
.isEqualTo(
449447
"bl=0,br=800,cid=\"mediaId\",com.example.test-key-1=1,d=4000,dl=0,"
450448
+ "key-2=\"stringValue\",nor=\"..%2F3.mp4\",nrr=\"0-\",ot=v,sf=h,"

‎libraries/exoplayer_smoothstreaming/src/test/java/androidx/media3/exoplayer/smoothstreaming/DefaultSsChunkSourceTest.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -283,9 +283,7 @@ public int getRequestedMaximumThroughputKbps(int throughputKbps) {
283283
output);
284284

285285
assertThat(
286-
Uri.decode(
287-
output.chunk.dataSpec.uri.getQueryParameter(
288-
CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY)))
286+
output.chunk.dataSpec.uri.getQueryParameter(CmcdConfiguration.CMCD_QUERY_PARAMETER_KEY))
289287
.isEqualTo(
290288
"bl=0,br=308,cid=\"mediaId\",com.example.test-key-1=1,d=1968,dl=0,"
291289
+ "key-2=\"stringValue\",mtp=1000,nor=\"..%2FFragments(video%3D19680000)\",ot=v,"

0 commit comments

Comments
 (0)