Skip to content

Commit 2833f60

Browse files
committed
Avoid leaving streams open when writing libraries
Fixes gh-17115
1 parent 7103eab commit 2833f60

File tree

1 file changed

+13
-13
lines changed
  • spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools

1 file changed

+13
-13
lines changed

spring-boot-project/spring-boot-tools/spring-boot-loader-tools/src/main/java/org/springframework/boot/loader/tools/JarWriter.java

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ void writeEntries(JarFile jarFile, EntryTransformer entryTransformer, UnpackHand
134134
JarArchiveEntry entry = new JarArchiveEntry(entries.nextElement());
135135
setUpEntry(jarFile, entry);
136136
try (ZipHeaderPeekInputStream inputStream = new ZipHeaderPeekInputStream(jarFile.getInputStream(entry))) {
137-
EntryWriter entryWriter = new InputStreamEntryWriter(inputStream, true);
137+
EntryWriter entryWriter = new InputStreamEntryWriter(inputStream);
138138
JarArchiveEntry transformedEntry = entryTransformer.transform(entry);
139139
if (transformedEntry != null) {
140140
writeEntry(transformedEntry, entryWriter, unpackHandler);
@@ -163,7 +163,12 @@ private void setUpEntry(JarFile jarFile, JarArchiveEntry entry) throws IOExcepti
163163
@Override
164164
public void writeEntry(String entryName, InputStream inputStream) throws IOException {
165165
JarArchiveEntry entry = new JarArchiveEntry(entryName);
166-
writeEntry(entry, new InputStreamEntryWriter(inputStream, true));
166+
try {
167+
writeEntry(entry, new InputStreamEntryWriter(inputStream));
168+
}
169+
finally {
170+
inputStream.close();
171+
}
167172
}
168173

169174
/**
@@ -177,8 +182,9 @@ public void writeNestedLibrary(String destination, Library library) throws IOExc
177182
JarArchiveEntry entry = new JarArchiveEntry(destination + library.getName());
178183
entry.setTime(getNestedLibraryTime(file));
179184
new CrcAndSize(file).setupStoredEntry(entry);
180-
writeEntry(entry, new InputStreamEntryWriter(new FileInputStream(file), true),
181-
new LibraryUnpackHandler(library));
185+
try (FileInputStream input = new FileInputStream(file)) {
186+
writeEntry(entry, new InputStreamEntryWriter(input), new LibraryUnpackHandler(library));
187+
}
182188
}
183189

184190
private long getNestedLibraryTime(File file) {
@@ -221,7 +227,7 @@ public void writeLoaderClasses(String loaderJarResourceName) throws IOException
221227
JarEntry entry;
222228
while ((entry = inputStream.getNextJarEntry()) != null) {
223229
if (entry.getName().endsWith(".class")) {
224-
writeEntry(new JarArchiveEntry(entry), new InputStreamEntryWriter(inputStream, false));
230+
writeEntry(new JarArchiveEntry(entry), new InputStreamEntryWriter(inputStream));
225231
}
226232
}
227233
}
@@ -283,7 +289,7 @@ private EntryWriter addUnpackCommentIfNecessary(JarArchiveEntry entry, EntryWrit
283289
ByteArrayOutputStream output = new ByteArrayOutputStream();
284290
entryWriter.write(output);
285291
entry.setComment("UNPACK:" + unpackHandler.sha1Hash(entry.getName()));
286-
return new InputStreamEntryWriter(new ByteArrayInputStream(output.toByteArray()), true);
292+
return new InputStreamEntryWriter(new ByteArrayInputStream(output.toByteArray()));
287293
}
288294

289295
/**
@@ -307,11 +313,8 @@ private static class InputStreamEntryWriter implements EntryWriter {
307313

308314
private final InputStream inputStream;
309315

310-
private final boolean close;
311-
312-
InputStreamEntryWriter(InputStream inputStream, boolean close) {
316+
InputStreamEntryWriter(InputStream inputStream) {
313317
this.inputStream = inputStream;
314-
this.close = close;
315318
}
316319

317320
@Override
@@ -322,9 +325,6 @@ public void write(OutputStream outputStream) throws IOException {
322325
outputStream.write(buffer, 0, bytesRead);
323326
}
324327
outputStream.flush();
325-
if (this.close) {
326-
this.inputStream.close();
327-
}
328328
}
329329

330330
}

0 commit comments

Comments
 (0)