You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by bo...@apache.org on 2016/04/17 07:07:02 UTC
commons-compress git commit: COMPRESS-351 try to sanitize entry name
in exception message
Repository: commons-compress
Updated Branches:
refs/heads/master 2cc332cc2 -> ddb8f08c7
COMPRESS-351 try to sanitize entry name in exception message
Project: http://git-wip-us.apache.org/repos/asf/commons-compress/repo
Commit: http://git-wip-us.apache.org/repos/asf/commons-compress/commit/ddb8f08c
Tree: http://git-wip-us.apache.org/repos/asf/commons-compress/tree/ddb8f08c
Diff: http://git-wip-us.apache.org/repos/asf/commons-compress/diff/ddb8f08c
Branch: refs/heads/master
Commit: ddb8f08c79b8568c9cba3af61fb5a613e0ccba22
Parents: 2cc332c
Author: Stefan Bodewig <bo...@apache.org>
Authored: Sun Apr 17 07:06:24 2016 +0200
Committer: Stefan Bodewig <bo...@apache.org>
Committed: Sun Apr 17 07:06:24 2016 +0200
----------------------------------------------------------------------
.../archivers/zip/ZipArchiveInputStream.java | 18 +++++++++++++++++-
1 file changed, 17 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/commons-compress/blob/ddb8f08c/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
index d64ae4e..47668fc 100644
--- a/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
+++ b/src/main/java/org/apache/commons/compress/archivers/zip/ZipArchiveInputStream.java
@@ -653,7 +653,12 @@ public class ZipArchiveInputStream extends ArchiveInputStream {
while (remaining > 0) {
final long n = in.read(buf.array(), 0, (int) Math.min(buf.capacity(), remaining));
if (n < 0) {
- throw new EOFException("Truncated ZIP entry: " + current.entry.getName());
+ String name = current.entry.getName();
+ int idx = firstUnprintableCharacter(current.entry.getName());
+ if (idx >= 0) {
+ name = "corrupted name starting with '" + name.substring(0, idx) + "'";
+ }
+ throw new EOFException("Truncated ZIP entry: " + name);
}
count(n);
remaining -= n;
@@ -983,6 +988,17 @@ public class ZipArchiveInputStream extends ArchiveInputStream {
return b == ZipArchiveOutputStream.EOCD_SIG[0];
}
+ private int firstUnprintableCharacter(String name) {
+ final char[] chars = name.toCharArray();
+ final int len = chars.length;
+ for (int i = 0; i < len; i++) {
+ if (Character.isISOControl(chars[i]) || !Character.isDefined(chars[i])) {
+ return i;
+ }
+ }
+ return -1;
+ }
+
/**
* Structure collecting information for the entry that is
* currently being read.