diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 84812051b2..4a1a9cf4a9 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -46,6 +46,8 @@ * DASH Extension: * Smooth Streaming Extension: * RTSP Extension: + * Fix user info removal for URLs that contain encoded @ characters + ([#1138](https://github.com/androidx/media/pull/1138)). * Decoder Extensions (FFmpeg, VP9, AV1, etc.): * MIDI extension: * Leanback extension: diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java index bdd6d4cd96..7c5b09fcf6 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java @@ -192,7 +192,7 @@ import java.util.regex.Pattern; } // The Uri must include a "@" if the user info is non-null. - String authorityWithUserInfo = checkNotNull(uri.getAuthority()); + String authorityWithUserInfo = checkNotNull(uri.getEncodedAuthority()); checkArgument(authorityWithUserInfo.contains("@")); String authority = Util.split(authorityWithUserInfo, "@")[1]; return uri.buildUpon().encodedAuthority(authority).build(); diff --git a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java index 7439ea3eeb..09d80b5e11 100644 --- a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java +++ b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java @@ -449,6 +449,12 @@ public final class RtspMessageUtilTest { .isEqualTo(Uri.parse("rtsp://foo.bar:5050/foo.mkv")); } + @Test + public void removeUserInfo_withEncodedAtInUserInfo() { + Uri uri = Uri.parse("rtsp://user%40name:pass@foo.bar/foo.mkv"); + assertThat(RtspMessageUtil.removeUserInfo(uri)).isEqualTo(Uri.parse("rtsp://foo.bar/foo.mkv")); + } + @Test public void parseContentLengthHeader_withContentLengthOver31Bits_succeeds() throws Exception { String line = "Content-Length: 1000000000000000";