Fix RTSP WWW-Authenticate header parsing.

Issue: #9428

PiperOrigin-RevId: 397064086
This commit is contained in:
claincly 2021-09-16 14:12:19 +01:00 committed by Christos Tsilopoulos
parent dfc29fc315
commit 212e37f82a
3 changed files with 11 additions and 9 deletions

View File

@ -48,6 +48,8 @@
([#9346](https://github.com/google/ExoPlayer/issues/9346)). ([#9346](https://github.com/google/ExoPlayer/issues/9346)).
* Fix RTSP Session header handling * Fix RTSP Session header handling
([#9416](https://github.com/google/ExoPlayer/issues/9416)). ([#9416](https://github.com/google/ExoPlayer/issues/9416)).
* Fix RTSP WWW-Authenticate header parsing
([#9428](https://github.com/google/ExoPlayer/issues/9428)).
* UI: * UI:
* Use `defStyleAttr` when obtaining styled attributes in * Use `defStyleAttr` when obtaining styled attributes in
`StyledPlayerView`, `PlayerView` and `PlayerControlView` `StyledPlayerView`, `PlayerView` and `PlayerControlView`

View File

@ -99,13 +99,13 @@ import java.util.regex.Pattern;
// WWW-Authenticate header pattern, see RFC2068 Sections 14.46 and RFC2069. // WWW-Authenticate header pattern, see RFC2068 Sections 14.46 and RFC2069.
private static final Pattern WWW_AUTHENTICATION_HEADER_DIGEST_PATTERN = private static final Pattern WWW_AUTHENTICATION_HEADER_DIGEST_PATTERN =
Pattern.compile( Pattern.compile(
"Digest realm=\"([\\w\\s@.]+)\"" "Digest realm=\"([^\"\\x00-\\x08\\x0A-\\x1f\\x7f]+)\""
+ ",\\s?(?:domain=\"(.+)\",\\s?)?" + ",\\s?(?:domain=\"(.+)\""
+ "nonce=\"(\\w+)\"" + ",\\s?)?nonce=\"([^\"\\x00-\\x08\\x0A-\\x1f\\x7f]+)\""
+ "(?:,\\s?opaque=\"(\\w+)\")?"); + "(?:,\\s?opaque=\"([^\"\\x00-\\x08\\x0A-\\x1f\\x7f]+)\")?");
// WWW-Authenticate header pattern, see RFC2068 Section 11.1 and RFC2069. // WWW-Authenticate header pattern, see RFC2068 Section 11.1 and RFC2069.
private static final Pattern WWW_AUTHENTICATION_HEADER_BASIC_PATTERN = private static final Pattern WWW_AUTHENTICATION_HEADER_BASIC_PATTERN =
Pattern.compile("Basic realm=\"([\\w\\s@.]+)\""); Pattern.compile("Basic realm=\"([^\"\\x00-\\x08\\x0A-\\x1f\\x7f]+)\"");
private static final String RTSP_VERSION = "RTSP/1.0"; private static final String RTSP_VERSION = "RTSP/1.0";
private static final String LF = new String(new byte[] {Ascii.LF}); private static final String LF = new String(new byte[] {Ascii.LF});

View File

@ -452,10 +452,10 @@ public final class RtspMessageUtilTest {
@Test @Test
public void parseWWWAuthenticateHeader_withBasicAuthentication_succeeds() throws Exception { public void parseWWWAuthenticateHeader_withBasicAuthentication_succeeds() throws Exception {
RtspAuthenticationInfo authenticationInfo = RtspAuthenticationInfo authenticationInfo =
RtspMessageUtil.parseWwwAuthenticateHeader("Basic realm=\"WallyWorld\""); RtspMessageUtil.parseWwwAuthenticateHeader("Basic realm=\"Wally - World\"");
assertThat(authenticationInfo.authenticationMechanism).isEqualTo(RtspAuthenticationInfo.BASIC); assertThat(authenticationInfo.authenticationMechanism).isEqualTo(RtspAuthenticationInfo.BASIC);
assertThat(authenticationInfo.nonce).isEmpty(); assertThat(authenticationInfo.nonce).isEmpty();
assertThat(authenticationInfo.realm).isEqualTo("WallyWorld"); assertThat(authenticationInfo.realm).isEqualTo("Wally - World");
} }
@Test @Test
@ -463,13 +463,13 @@ public final class RtspMessageUtilTest {
throws Exception { throws Exception {
RtspAuthenticationInfo authenticationInfo = RtspAuthenticationInfo authenticationInfo =
RtspMessageUtil.parseWwwAuthenticateHeader( RtspMessageUtil.parseWwwAuthenticateHeader(
"Digest realm=\"testrealm@host.com\", domain=\"host.com\"," "Digest realm=\"test-realm@host.com\", domain=\"host.com\","
+ " nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", " + " nonce=\"dcd98b7102dd2f0e8b11d0f600bfb0c093\", "
+ " opaque=\"5ccc069c403ebaf9f0171e9517f40e41\""); + " opaque=\"5ccc069c403ebaf9f0171e9517f40e41\"");
assertThat(authenticationInfo.authenticationMechanism).isEqualTo(RtspAuthenticationInfo.DIGEST); assertThat(authenticationInfo.authenticationMechanism).isEqualTo(RtspAuthenticationInfo.DIGEST);
assertThat(authenticationInfo.nonce).isEqualTo("dcd98b7102dd2f0e8b11d0f600bfb0c093"); assertThat(authenticationInfo.nonce).isEqualTo("dcd98b7102dd2f0e8b11d0f600bfb0c093");
assertThat(authenticationInfo.realm).isEqualTo("testrealm@host.com"); assertThat(authenticationInfo.realm).isEqualTo("test-realm@host.com");
assertThat(authenticationInfo.opaque).isEmpty(); assertThat(authenticationInfo.opaque).isEmpty();
} }