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());
         }
     }