commit
4aa0d9dcac
|
|
@ -706,6 +706,7 @@ public class NestedJarFile extends JarFile {
|
||||||
JarEntryInputStream(ZipContent.Entry entry) throws IOException {
|
JarEntryInputStream(ZipContent.Entry entry) throws IOException {
|
||||||
this.uncompressedSize = entry.getUncompressedSize();
|
this.uncompressedSize = entry.getUncompressedSize();
|
||||||
this.content = entry.openContent();
|
this.content = entry.openContent();
|
||||||
|
this.remaining = this.uncompressedSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -727,9 +728,6 @@ public class NestedJarFile extends JarFile {
|
||||||
}
|
}
|
||||||
result = count;
|
result = count;
|
||||||
}
|
}
|
||||||
if (this.remaining == 0) {
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -741,9 +739,6 @@ public class NestedJarFile extends JarFile {
|
||||||
this.pos += result;
|
this.pos += result;
|
||||||
this.remaining -= result;
|
this.remaining -= result;
|
||||||
}
|
}
|
||||||
if (this.remaining == 0) {
|
|
||||||
close();
|
|
||||||
}
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -431,6 +431,56 @@ class NestedJarFileTests {
|
||||||
.hasMessage("Content mismatch when reading security info for entry 'content' (content check)");
|
.hasMessage("Content mismatch when reading security info for entry 'content' (content check)");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void readingToEndOfStoredContentCausesAvailableToReachZero() throws IOException {
|
||||||
|
try (NestedJarFile jar = new NestedJarFile(this.file)) {
|
||||||
|
JarEntry entry = jar.getEntry("nested.jar");
|
||||||
|
try (InputStream input = jar.getInputStream(entry)) {
|
||||||
|
assertThat(input.available()).isGreaterThan(0);
|
||||||
|
StreamUtils.copyToByteArray(input);
|
||||||
|
assertThat(input.available()).isZero();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void readingToEndOfDeflatedContentCausesAvailableToReachZero() throws IOException {
|
||||||
|
try (NestedJarFile jar = new NestedJarFile(this.file)) {
|
||||||
|
JarEntry entry = jar.getEntry("d/9.dat");
|
||||||
|
try (InputStream input = jar.getInputStream(entry)) {
|
||||||
|
assertThat(input.available()).isGreaterThan(0);
|
||||||
|
StreamUtils.copyToByteArray(input);
|
||||||
|
assertThat(input.available()).isZero();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void skippingBeyondEndOfStoredContentCausesAvailableToReachZero() throws IOException {
|
||||||
|
try (NestedJarFile jar = new NestedJarFile(this.file)) {
|
||||||
|
JarEntry entry = jar.getEntry("nested.jar");
|
||||||
|
try (InputStream input = jar.getInputStream(entry)) {
|
||||||
|
assertThat(input.available()).isGreaterThan(0);
|
||||||
|
long skipped = input.skip(1000);
|
||||||
|
assertThat(skipped).isLessThan(1000);
|
||||||
|
assertThat(input.available()).isZero();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void skippingBeyondEndOfDeflatedContentCausesAvailableToReachZero() throws IOException {
|
||||||
|
try (NestedJarFile jar = new NestedJarFile(this.file)) {
|
||||||
|
JarEntry entry = jar.getEntry("d/9.dat");
|
||||||
|
try (InputStream input = jar.getInputStream(entry)) {
|
||||||
|
assertThat(input.available()).isGreaterThan(0);
|
||||||
|
long skipped = input.skip(1000);
|
||||||
|
assertThat(skipped).isLessThan(1000);
|
||||||
|
assertThat(input.available()).isZero();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private List<String> collectComments(JarFile jarFile) throws IOException {
|
private List<String> collectComments(JarFile jarFile) throws IOException {
|
||||||
try (jarFile) {
|
try (jarFile) {
|
||||||
List<String> comments = new ArrayList<>();
|
List<String> comments = new ArrayList<>();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue