diff options
Diffstat (limited to 'luni/src/main/java/java/util/zip/ZipEntry.java')
-rw-r--r-- | luni/src/main/java/java/util/zip/ZipEntry.java | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/luni/src/main/java/java/util/zip/ZipEntry.java b/luni/src/main/java/java/util/zip/ZipEntry.java index 685c1be..ab48625 100644 --- a/luni/src/main/java/java/util/zip/ZipEntry.java +++ b/luni/src/main/java/java/util/zip/ZipEntry.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.io.InputStream; import java.nio.ByteOrder; import java.nio.charset.Charsets; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -391,6 +392,9 @@ public class ZipEntry implements ZipConstants, Cloneable { byte[] nameBytes = new byte[nameLength]; Streams.readFully(in, nameBytes, 0, nameBytes.length); + if (containsNulByte(nameBytes)) { + throw new ZipException("Filename contains NUL byte: " + Arrays.toString(nameBytes)); + } name = new String(nameBytes, 0, nameBytes.length, Charsets.UTF_8); // The RI has always assumed UTF-8. (If GPBF_UTF8_FLAG isn't set, the encoding is @@ -406,4 +410,13 @@ public class ZipEntry implements ZipConstants, Cloneable { Streams.readFully(in, extra, 0, extraLength); } } + + private static boolean containsNulByte(byte[] bytes) { + for (byte b : bytes) { + if (b == 0) { + return true; + } + } + return false; + } } |