mirror of
https://github.com/spring-projects/spring-boot.git
synced 2024-09-03 04:26:12 +08:00
Fix missing jar entry certificates
Ensure that the source jar entry is closed before reading certificates and code signers from the entry. gh-19041
This commit is contained in:
parent
d73ee9d545
commit
e0030094e2
@ -353,11 +353,12 @@ class JarFileEntries implements CentralDirectoryVisitor, Iterable<JarEntry> {
|
|||||||
try (JarInputStream certifiedJarStream = new JarInputStream(this.jarFile.getData().getInputStream())) {
|
try (JarInputStream certifiedJarStream = new JarInputStream(this.jarFile.getData().getInputStream())) {
|
||||||
java.util.jar.JarEntry certifiedEntry = null;
|
java.util.jar.JarEntry certifiedEntry = null;
|
||||||
while ((certifiedEntry = certifiedJarStream.getNextJarEntry()) != null) {
|
while ((certifiedEntry = certifiedJarStream.getNextJarEntry()) != null) {
|
||||||
|
// Entry must be closed to trigger a read and set entry certificates
|
||||||
|
certifiedJarStream.closeEntry();
|
||||||
int index = getEntryIndex(certifiedEntry.getName());
|
int index = getEntryIndex(certifiedEntry.getName());
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
certifications[index] = JarEntryCertification.from(certifiedEntry);
|
certifications[index] = JarEntryCertification.from(certifiedEntry);
|
||||||
}
|
}
|
||||||
certifiedJarStream.closeEntry();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.certifications = certifications;
|
this.certifications = certifications;
|
||||||
|
@ -385,11 +385,14 @@ public class JarFileTests {
|
|||||||
while (actualEntries.hasMoreElements()) {
|
while (actualEntries.hasMoreElements()) {
|
||||||
JarEntry actualEntry = actualEntries.nextElement();
|
JarEntry actualEntry = actualEntries.nextElement();
|
||||||
java.util.jar.JarEntry expectedEntry = expected.getJarEntry(actualEntry.getName());
|
java.util.jar.JarEntry expectedEntry = expected.getJarEntry(actualEntry.getName());
|
||||||
|
StreamUtils.drain(expected.getInputStream(expectedEntry));
|
||||||
|
if (!actualEntry.getName().equals("META-INF/MANIFEST.MF")) {
|
||||||
assertThat(actualEntry.getCertificates()).as(actualEntry.getName())
|
assertThat(actualEntry.getCertificates()).as(actualEntry.getName())
|
||||||
.isEqualTo(expectedEntry.getCertificates());
|
.isEqualTo(expectedEntry.getCertificates());
|
||||||
assertThat(actualEntry.getCodeSigners()).as(actualEntry.getName())
|
assertThat(actualEntry.getCodeSigners()).as(actualEntry.getName())
|
||||||
.isEqualTo(expectedEntry.getCodeSigners());
|
.isEqualTo(expectedEntry.getCodeSigners());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
assertThat(stopWatch.getTotalTimeSeconds()).isLessThan(3.0);
|
assertThat(stopWatch.getTotalTimeSeconds()).isLessThan(3.0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user