improve error message for unparseable extra data. COMPRESS-73
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/compress/trunk@909366 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index d50be90..9baf114 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -23,7 +23,11 @@
</properties>
<body>
<release version="1.1" date="as in SVN" description="Release 1.1">
- <action type="add" issue="COMPRESS-95" date="2010-01-29"
+ <action type="fix" date="2010-02-12">
+ Improved exception message if the extra field data in ZIP
+ archives cannot be parsed.
+ </action>
+ <action type="add" issue="COMPRESS-95" date="2010-01-29"
due-to="Joerg Bellmann">
Improve ExceptionMessages in ArchiveStreamFactory
</action>
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java b/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
index 47e8e8d..9f9de11 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtils.java
@@ -112,8 +112,12 @@
ZipShort headerId = new ZipShort(data, start);
int length = (new ZipShort(data, start + 2)).getValue();
if (start + WORD + length > data.length) {
- throw new ZipException("data starting at " + start
- + " is in unknown format");
+ throw new ZipException("bad extra field starting at "
+ + start + ". Block length of "
+ + length + " bytes exceeds remaining"
+ + " data of "
+ + (data.length - start - WORD)
+ + " bytes.");
}
try {
ZipExtraField ze = createExtraField(headerId);
diff --git a/src/test/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtilsTest.java b/src/test/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtilsTest.java
index b68601b..9626c77 100644
--- a/src/test/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtilsTest.java
+++ b/src/test/java/org/apache/commons/compress/archivers/zip/ExtraFieldUtilsTest.java
@@ -78,7 +78,8 @@
fail("data should be invalid");
} catch (Exception e) {
assertEquals("message",
- "data starting at "+(4+aLocal.length)+" is in unknown format",
+ "bad extra field starting at "+(4 + aLocal.length)
+ + ". Block length of 1 bytes exceeds remaining data of 0 bytes.",
e.getMessage());
}
}