Browse Source

Merge branch '3.5.x'

Closes gh-47058
pull/47072/head
Andy Wilkinson 3 months ago
parent
commit
4aa0d9dcac
  1. 7
      loader/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/NestedJarFile.java
  2. 50
      loader/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/NestedJarFileTests.java

7
loader/spring-boot-loader/src/main/java/org/springframework/boot/loader/jar/NestedJarFile.java

@ -706,6 +706,7 @@ public class NestedJarFile extends JarFile { @@ -706,6 +706,7 @@ public class NestedJarFile extends JarFile {
JarEntryInputStream(ZipContent.Entry entry) throws IOException {
this.uncompressedSize = entry.getUncompressedSize();
this.content = entry.openContent();
this.remaining = this.uncompressedSize;
}
@Override
@ -727,9 +728,6 @@ public class NestedJarFile extends JarFile { @@ -727,9 +728,6 @@ public class NestedJarFile extends JarFile {
}
result = count;
}
if (this.remaining == 0) {
close();
}
return result;
}
@ -741,9 +739,6 @@ public class NestedJarFile extends JarFile { @@ -741,9 +739,6 @@ public class NestedJarFile extends JarFile {
this.pos += result;
this.remaining -= result;
}
if (this.remaining == 0) {
close();
}
return result;
}

50
loader/spring-boot-loader/src/test/java/org/springframework/boot/loader/jar/NestedJarFileTests.java

@ -431,6 +431,56 @@ class NestedJarFileTests { @@ -431,6 +431,56 @@ class NestedJarFileTests {
.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 {
try (jarFile) {
List<String> comments = new ArrayList<>();

Loading…
Cancel
Save