Commit a1d376fa by olly Committed by Christos Tsilopoulos

Fix incorrect assertion in CacheDataSource

#minor-release
#exofixit

PiperOrigin-RevId: 395233639
parent 624d212d
...@@ -6,6 +6,9 @@ ...@@ -6,6 +6,9 @@
* Fix track selection in `StyledPlayerControlView` when using * Fix track selection in `StyledPlayerControlView` when using
`ForwardingPlayer`. `ForwardingPlayer`.
* Fix `FlagSet#equals` on API levels below 24. * Fix `FlagSet#equals` on API levels below 24.
* Fix `NullPointerException` being thrown from `CacheDataSource` when
reading a fully cached resource with `DataSpec.position` equal to the
resource length.
* Extractors: * Extractors:
* Support TS packets without PTS flag * Support TS packets without PTS flag
([#9294](https://github.com/google/ExoPlayer/issues/9294)). ([#9294](https://github.com/google/ExoPlayer/issues/9294)).
......
...@@ -597,14 +597,14 @@ public final class CacheDataSource implements DataSource { ...@@ -597,14 +597,14 @@ public final class CacheDataSource implements DataSource {
@Override @Override
public int read(byte[] buffer, int offset, int length) throws IOException { public int read(byte[] buffer, int offset, int length) throws IOException {
DataSpec requestDataSpec = checkNotNull(this.requestDataSpec);
DataSpec currentDataSpec = checkNotNull(this.currentDataSpec);
if (length == 0) { if (length == 0) {
return 0; return 0;
} }
if (bytesRemaining == 0) { if (bytesRemaining == 0) {
return C.RESULT_END_OF_INPUT; return C.RESULT_END_OF_INPUT;
} }
DataSpec requestDataSpec = checkNotNull(this.requestDataSpec);
DataSpec currentDataSpec = checkNotNull(this.currentDataSpec);
try { try {
if (readPosition >= checkCachePosition) { if (readPosition >= checkCachePosition) {
openNextSource(requestDataSpec, true); openNextSource(requestDataSpec, true);
......
...@@ -125,6 +125,28 @@ public final class CacheDataSourceTest { ...@@ -125,6 +125,28 @@ public final class CacheDataSourceTest {
} }
@Test @Test
public void cacheAndReadFromLength_readsZeroBytes() throws Exception {
// Read and cache all data from upstream.
CacheDataSource cacheDataSource =
createCacheDataSource(
/* setReadException= */ false, /* unknownLength= */ false, /* cacheKeyFactory= */ null);
assertReadDataContentLength(
cacheDataSource,
unboundedDataSpec,
/* unknownLength= */ false,
/* customCacheKey= */ false);
// Read from position == length.
cacheDataSource =
createCacheDataSource(
/* setReadException= */ true, /* unknownLength= */ false, /* cacheKeyFactory= */ null);
assertReadData(
cacheDataSource,
unboundedDataSpec.buildUpon().setPosition(TEST_DATA.length).build(),
/* unknownLength= */ false);
}
@Test
public void propagatesHttpHeadersUpstream() throws Exception { public void propagatesHttpHeadersUpstream() throws Exception {
CacheDataSource cacheDataSource = CacheDataSource cacheDataSource =
createCacheDataSource(/* setReadException= */ false, /* unknownLength= */ false); createCacheDataSource(/* setReadException= */ false, /* unknownLength= */ false);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment