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; } /**