Commit ff1983c9 authored by Andy Wilkinson's avatar Andy Wilkinson

Merge branch '2.1.x'

Closes gh-18168
parents fc1889ee 795c2f22
...@@ -123,4 +123,10 @@ class CentralDirectoryEndRecord { ...@@ -123,4 +123,10 @@ class CentralDirectoryEndRecord {
return (int) numberOfRecords; return (int) numberOfRecords;
} }
String getComment() {
int commentLength = (int) Bytes.littleEndianValue(this.block, this.offset + COMMENT_LENGTH_OFFSET, 2);
AsciiBytes comment = new AsciiBytes(this.block, this.offset + COMMENT_LENGTH_OFFSET + 2, commentLength);
return comment.toString();
}
} }
...@@ -80,6 +80,8 @@ public class JarFile extends java.util.jar.JarFile { ...@@ -80,6 +80,8 @@ public class JarFile extends java.util.jar.JarFile {
private boolean signed; private boolean signed;
private String comment;
/** /**
* Create a new {@link JarFile} backed by the specified file. * Create a new {@link JarFile} backed by the specified file.
* @param file the root jar file * @param file the root jar file
...@@ -146,6 +148,7 @@ public class JarFile extends java.util.jar.JarFile { ...@@ -146,6 +148,7 @@ public class JarFile extends java.util.jar.JarFile {
@Override @Override
public void visitStart(CentralDirectoryEndRecord endRecord, RandomAccessData centralDirectoryData) { public void visitStart(CentralDirectoryEndRecord endRecord, RandomAccessData centralDirectoryData) {
JarFile.this.comment = endRecord.getComment();
} }
@Override @Override
...@@ -290,6 +293,11 @@ public class JarFile extends java.util.jar.JarFile { ...@@ -290,6 +293,11 @@ public class JarFile extends java.util.jar.JarFile {
JarFileType.NESTED_JAR); JarFileType.NESTED_JAR);
} }
@Override
public String getComment() {
return this.comment;
}
@Override @Override
public int size() { public int size() {
return this.entries.getSize(); return this.entries.getSize();
......
...@@ -41,6 +41,7 @@ public abstract class TestJarCreator { ...@@ -41,6 +41,7 @@ public abstract class TestJarCreator {
public static void createTestJar(File file, boolean unpackNested) throws Exception { public static void createTestJar(File file, boolean unpackNested) throws Exception {
FileOutputStream fileOutputStream = new FileOutputStream(file); FileOutputStream fileOutputStream = new FileOutputStream(file);
try (JarOutputStream jarOutputStream = new JarOutputStream(fileOutputStream)) { try (JarOutputStream jarOutputStream = new JarOutputStream(fileOutputStream)) {
jarOutputStream.setComment("outer");
writeManifest(jarOutputStream, "j1"); writeManifest(jarOutputStream, "j1");
writeEntry(jarOutputStream, "1.dat", 1); writeEntry(jarOutputStream, "1.dat", 1);
writeEntry(jarOutputStream, "2.dat", 2); writeEntry(jarOutputStream, "2.dat", 2);
...@@ -88,6 +89,7 @@ public abstract class TestJarCreator { ...@@ -88,6 +89,7 @@ public abstract class TestJarCreator {
private static byte[] getNestedJarData(boolean multiRelease) throws Exception { private static byte[] getNestedJarData(boolean multiRelease) throws Exception {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
JarOutputStream jarOutputStream = new JarOutputStream(byteArrayOutputStream); JarOutputStream jarOutputStream = new JarOutputStream(byteArrayOutputStream);
jarOutputStream.setComment("nested");
writeManifest(jarOutputStream, "j2", multiRelease); writeManifest(jarOutputStream, "j2", multiRelease);
if (multiRelease) { if (multiRelease) {
writeEntry(jarOutputStream, "multi-release.dat", 8); writeEntry(jarOutputStream, "multi-release.dat", 8);
......
...@@ -86,6 +86,7 @@ class JarFileTests { ...@@ -86,6 +86,7 @@ class JarFileTests {
void jdkJarFile() throws Exception { void jdkJarFile() throws Exception {
// Sanity checks to see how the default jar file operates // Sanity checks to see how the default jar file operates
java.util.jar.JarFile jarFile = new java.util.jar.JarFile(this.rootJarFile); java.util.jar.JarFile jarFile = new java.util.jar.JarFile(this.rootJarFile);
assertThat(jarFile.getComment()).isEqualTo("outer");
Enumeration<java.util.jar.JarEntry> entries = jarFile.entries(); Enumeration<java.util.jar.JarEntry> entries = jarFile.entries();
assertThat(entries.nextElement().getName()).isEqualTo("META-INF/"); assertThat(entries.nextElement().getName()).isEqualTo("META-INF/");
assertThat(entries.nextElement().getName()).isEqualTo("META-INF/MANIFEST.MF"); assertThat(entries.nextElement().getName()).isEqualTo("META-INF/MANIFEST.MF");
...@@ -168,6 +169,11 @@ class JarFileTests { ...@@ -168,6 +169,11 @@ class JarFileTests {
assertThat(inputStream.read()).isEqualTo(-1); assertThat(inputStream.read()).isEqualTo(-1);
} }
@Test
void getComment() {
assertThat(this.jarFile.getComment()).isEqualTo("outer");
}
@Test @Test
void getName() { void getName() {
assertThat(this.jarFile.getName()).isEqualTo(this.rootJarFile.getPath()); assertThat(this.jarFile.getName()).isEqualTo(this.rootJarFile.getPath());
...@@ -252,6 +258,7 @@ class JarFileTests { ...@@ -252,6 +258,7 @@ class JarFileTests {
@Test @Test
void getNestedJarFile() throws Exception { void getNestedJarFile() throws Exception {
try (JarFile nestedJarFile = this.jarFile.getNestedJarFile(this.jarFile.getEntry("nested.jar"))) { try (JarFile nestedJarFile = this.jarFile.getNestedJarFile(this.jarFile.getEntry("nested.jar"))) {
assertThat(nestedJarFile.getComment()).isEqualTo("nested");
Enumeration<java.util.jar.JarEntry> entries = nestedJarFile.entries(); Enumeration<java.util.jar.JarEntry> entries = nestedJarFile.entries();
assertThat(entries.nextElement().getName()).isEqualTo("META-INF/"); assertThat(entries.nextElement().getName()).isEqualTo("META-INF/");
assertThat(entries.nextElement().getName()).isEqualTo("META-INF/MANIFEST.MF"); assertThat(entries.nextElement().getName()).isEqualTo("META-INF/MANIFEST.MF");
......
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 to comment