src/share/classes/java/util/zip/ZipInputStream.java
Print this page
*** 1,7 ****
/*
! * Copyright (c) 1996, 2012, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
--- 1,7 ----
/*
! * Copyright (c) 1996, 2013, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Oracle designates this
*** 286,298 ****
flag = get16(tmpbuf, LOCFLG);
// get the entry name and create the ZipEntry first
int len = get16(tmpbuf, LOCNAM);
int blen = b.length;
if (len > blen) {
! do
blen = blen * 2;
! while (len > blen);
b = new byte[blen];
}
readFully(b, 0, len);
// Force to use UTF-8 if the EFS bit is ON, even the cs is NOT UTF-8
ZipEntry e = createZipEntry(((flag & EFS) != 0)
--- 286,298 ----
flag = get16(tmpbuf, LOCFLG);
// get the entry name and create the ZipEntry first
int len = get16(tmpbuf, LOCNAM);
int blen = b.length;
if (len > blen) {
! do {
blen = blen * 2;
! } while (len > blen);
b = new byte[blen];
}
readFully(b, 0, len);
// Force to use UTF-8 if the EFS bit is ON, even the cs is NOT UTF-8
ZipEntry e = createZipEntry(((flag & EFS) != 0)
*** 301,311 ****
// now get the remaining fields for the entry
if ((flag & 1) == 1) {
throw new ZipException("encrypted ZIP entry not supported");
}
e.method = get16(tmpbuf, LOCHOW);
! e.mtime = dosToJavaTime(get32(tmpbuf, LOCTIM));
if ((flag & 8) == 8) {
/* "Data Descriptor" present */
if (e.method != DEFLATED) {
throw new ZipException(
"only DEFLATED entries can have EXT descriptor");
--- 301,311 ----
// now get the remaining fields for the entry
if ((flag & 1) == 1) {
throw new ZipException("encrypted ZIP entry not supported");
}
e.method = get16(tmpbuf, LOCHOW);
! e.time = dosToJavaTime(get32(tmpbuf, LOCTIM));
if ((flag & 8) == 8) {
/* "Data Descriptor" present */
if (e.method != DEFLATED) {
throw new ZipException(
"only DEFLATED entries can have EXT descriptor");
*** 317,369 ****
}
len = get16(tmpbuf, LOCEXT);
if (len > 0) {
byte[] extra = new byte[len];
readFully(extra, 0, len);
! e.setExtra(extra);
! // extra fields are in "HeaderID(2)DataSize(2)Data... format
! int off = 0;
! while (off + 4 < len) {
! int pos = off;
! int tag = get16(extra, pos);
! int sz = get16(extra, pos + 2);
! pos += 4;
! if (pos + sz > len) // invalid data
! break;
! switch (tag) {
! case EXTID_ZIP64 :
! // LOC extra zip64 entry MUST include BOTH original and
! // compressed file size fields.
! //
! // If invalid zip64 extra fields, simply skip. Even it's
! // rare, it's possible the entry size happens to be
! // the magic value and it "accidently" has some bytes
! // in extra match the id.
! if (sz >= 16 && (pos + sz) <= len ) {
! e.size = get64(extra, pos);
! e.csize = get64(extra, pos + 8);
! }
! break;
! case EXTID_NTFS:
! pos += 4; // reserved 4 bytes
! if (get16(extra, pos) != 0x0001 || get16(extra, pos + 2) != 24)
! break;
! // override the loc field, NTFS time has 'microsecond' granularity
! e.mtime = winToJavaTime(get64(extra, pos + 4));
! break;
! case EXTID_EXTT:
! int flag = Byte.toUnsignedInt(extra[pos++]);
! if ((flag & 0x1) != 0) {
! e.mtime = unixToJavaTime(get32(extra, pos));
! pos += 4;
! }
! break;
! default: // unknown tag
! }
! off += (sz + 4);
! }
!
}
return e;
}
/**
--- 317,327 ----
}
len = get16(tmpbuf, LOCEXT);
if (len > 0) {
byte[] extra = new byte[len];
readFully(extra, 0, len);
! e.setExtra0(extra, true);
}
return e;
}
/**