8203328: Rename EFS in java.util.zip internals to something meaningful

Reviewed-by: sherman
This commit is contained in:
Martin Buchholz 2018-05-23 10:34:18 -07:00
parent e1bffce5a3
commit 42f7e3f69e
13 changed files with 41 additions and 41 deletions

View file

@ -75,7 +75,7 @@ import sun.nio.ch.DirectBuffer;
* *
* // Decode the bytes into a String * // Decode the bytes into a String
* String outputString = new String(result, 0, resultLength, "UTF-8"); * String outputString = new String(result, 0, resultLength, "UTF-8");
* } catch(java.io.UnsupportedEncodingException ex) { * } catch (java.io.UnsupportedEncodingException ex) {
* // handle * // handle
* } catch (java.util.zip.DataFormatException ex) { * } catch (java.util.zip.DataFormatException ex) {
* // handle * // handle

View file

@ -54,7 +54,6 @@ class DeflaterOutputStream extends FilterOutputStream {
/** /**
* Indicates that the stream has been closed. * Indicates that the stream has been closed.
*/ */
private boolean closed = false; private boolean closed = false;
private final boolean syncFlush; private final boolean syncFlush;
@ -62,7 +61,7 @@ class DeflaterOutputStream extends FilterOutputStream {
/** /**
* Creates a new output stream with the specified compressor, * Creates a new output stream with the specified compressor,
* buffer size and flush mode. * buffer size and flush mode.
*
* @param out the output stream * @param out the output stream
* @param def the compressor ("deflater") * @param def the compressor ("deflater")
* @param size the output buffer size * @param size the output buffer size

View file

@ -73,7 +73,7 @@ import sun.nio.ch.DirectBuffer;
* *
* // Decode the bytes into a String * // Decode the bytes into a String
* String outputString = new String(result, 0, resultLength, "UTF-8"); * String outputString = new String(result, 0, resultLength, "UTF-8");
* } catch(java.io.UnsupportedEncodingException ex) { * } catch (java.io.UnsupportedEncodingException ex) {
* // handle * // handle
* } catch (java.util.zip.DataFormatException ex) { * } catch (java.util.zip.DataFormatException ex) {
* // handle * // handle

View file

@ -74,11 +74,12 @@ class ZipConstants64 {
static final int ZIP64_EXTLEN = 16; // uncompressed size, 8-byte static final int ZIP64_EXTLEN = 16; // uncompressed size, 8-byte
/* /*
* Language encoding flag EFS * Language encoding flag (general purpose flag bit 11)
*
* If this bit is set the filename and comment fields for this
* entry must be encoded using UTF-8.
*/ */
static final int EFS = 0x800; // If this bit is set the filename and static final int USE_UTF8 = 0x800;
// comment fields for this file must be
// encoded using UTF-8.
/* /*
* Constants below are defined here (instead of in ZipConstants) * Constants below are defined here (instead of in ZipConstants)

View file

@ -354,7 +354,6 @@ class ZipEntry implements ZipConstants, Cloneable {
* or ZIP file formatted stream. * or ZIP file formatted stream.
* *
* @return The last access time of the entry, null if not specified * @return The last access time of the entry, null if not specified
* @see #setLastAccessTime(FileTime) * @see #setLastAccessTime(FileTime)
* @since 1.8 * @since 1.8
*/ */

View file

@ -377,7 +377,7 @@ class ZipFile implements ZipConstants, Closeable {
ensureOpen(); ensureOpen();
if (Objects.equals(lastEntryName, entry.name)) { if (Objects.equals(lastEntryName, entry.name)) {
pos = lastEntryPos; pos = lastEntryPos;
} else if (!zc.isUTF8() && (entry.flag & EFS) != 0) { } else if (!zc.isUTF8() && (entry.flag & USE_UTF8) != 0) {
pos = zsrc.getEntryPos(zc.getBytesUTF8(entry.name), false); pos = zsrc.getEntryPos(zc.getBytesUTF8(entry.name), false);
} else { } else {
pos = zsrc.getEntryPos(zc.getBytes(entry.name), false); pos = zsrc.getEntryPos(zc.getBytes(entry.name), false);
@ -519,7 +519,7 @@ class ZipFile implements ZipConstants, Closeable {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public T next() { public T next() {
synchronized (ZipFile.this) { synchronized (ZipFile.this) {
ensureOpen(); ensureOpen();
if (!hasNext()) { if (!hasNext()) {
@ -605,7 +605,7 @@ class ZipFile implements ZipConstants, Closeable {
private String getEntryName(int pos) { private String getEntryName(int pos) {
byte[] cen = res.zsrc.cen; byte[] cen = res.zsrc.cen;
int nlen = CENNAM(cen, pos); int nlen = CENNAM(cen, pos);
if (!zc.isUTF8() && (CENFLG(cen, pos) & EFS) != 0) { if (!zc.isUTF8() && (CENFLG(cen, pos) & USE_UTF8) != 0) {
return zc.toStringUTF8(cen, pos + CENHDR, nlen); return zc.toStringUTF8(cen, pos + CENHDR, nlen);
} else { } else {
return zc.toString(cen, pos + CENHDR, nlen); return zc.toString(cen, pos + CENHDR, nlen);
@ -665,7 +665,7 @@ class ZipFile implements ZipConstants, Closeable {
// (1) null, invoked from iterator, or // (1) null, invoked from iterator, or
// (2) not equal to the name stored, a slash is appended during // (2) not equal to the name stored, a slash is appended during
// getEntryPos() search. // getEntryPos() search.
if (!zc.isUTF8() && (flag & EFS) != 0) { if (!zc.isUTF8() && (flag & USE_UTF8) != 0) {
name = zc.toStringUTF8(cen, pos + CENHDR, nlen); name = zc.toStringUTF8(cen, pos + CENHDR, nlen);
} else { } else {
name = zc.toString(cen, pos + CENHDR, nlen); name = zc.toString(cen, pos + CENHDR, nlen);
@ -684,7 +684,7 @@ class ZipFile implements ZipConstants, Closeable {
} }
if (clen != 0) { if (clen != 0) {
int start = pos + CENHDR + nlen + elen; int start = pos + CENHDR + nlen + elen;
if (!zc.isUTF8() && (flag & EFS) != 0) { if (!zc.isUTF8() && (flag & USE_UTF8) != 0) {
e.comment = zc.toStringUTF8(cen, start, clen); e.comment = zc.toStringUTF8(cen, start, clen);
} else { } else {
e.comment = zc.toString(cen, start, clen); e.comment = zc.toString(cen, start, clen);
@ -790,7 +790,7 @@ class ZipFile implements ZipConstants, Closeable {
for (InputStream is : copy) { for (InputStream is : copy) {
try { try {
is.close(); is.close();
} catch (IOException e) { } catch (IOException e) {
if (ioe == null) ioe = e; if (ioe == null) ioe = e;
else ioe.addSuppressed(e); else ioe.addSuppressed(e);
} }
@ -805,9 +805,9 @@ class ZipFile implements ZipConstants, Closeable {
try { try {
Source.release(zsrc); Source.release(zsrc);
zsrc = null; zsrc = null;
} catch (IOException e) { } catch (IOException e) {
if (ioe == null) ioe = e; if (ioe == null) ioe = e;
else ioe.addSuppressed(e); else ioe.addSuppressed(e);
} }
} }
} }
@ -928,7 +928,7 @@ class ZipFile implements ZipConstants, Closeable {
* Inner class implementing the input stream used to read a * Inner class implementing the input stream used to read a
* (possibly compressed) zip file entry. * (possibly compressed) zip file entry.
*/ */
private class ZipFileInputStream extends InputStream { private class ZipFileInputStream extends InputStream {
private volatile boolean closeRequested; private volatile boolean closeRequested;
private long pos; // current position within entry data private long pos; // current position within entry data
protected long rem; // number of remaining bytes within entry protected long rem; // number of remaining bytes within entry
@ -947,7 +947,7 @@ class ZipFile implements ZipConstants, Closeable {
pos = - (pos + ZipFile.this.res.zsrc.locpos); pos = - (pos + ZipFile.this.res.zsrc.locpos);
} }
private void checkZIP64(byte[] cen, int cenpos) { private void checkZIP64(byte[] cen, int cenpos) {
int off = cenpos + CENHDR + CENNAM(cen, cenpos); int off = cenpos + CENHDR + CENNAM(cen, cenpos);
int end = off + CENEXT(cen, cenpos); int end = off + CENEXT(cen, cenpos);
while (off + 4 < end) { while (off + 4 < end) {
@ -984,11 +984,12 @@ class ZipFile implements ZipConstants, Closeable {
} }
} }
/* The Zip file spec explicitly allows the LOC extra data size to /*
* be different from the CEN extra data size. Since we cannot trust * The Zip file spec explicitly allows the LOC extra data size to
* the CEN extra data size, we need to read the LOC to determine * be different from the CEN extra data size. Since we cannot trust
* the entry data offset. * the CEN extra data size, we need to read the LOC to determine
*/ * the entry data offset.
*/
private long initDataOffset() throws IOException { private long initDataOffset() throws IOException {
if (pos <= 0) { if (pos <= 0) {
byte[] loc = new byte[LOCHDR]; byte[] loc = new byte[LOCHDR];
@ -1205,7 +1206,7 @@ class ZipFile implements ZipConstants, Closeable {
} }
Object fk = attrs.fileKey(); Object fk = attrs.fileKey();
if (fk != null) { if (fk != null) {
return fk.equals(key.attrs.fileKey()); return fk.equals(key.attrs.fileKey());
} else { } else {
return file.equals(key.file); return file.equals(key.file);
} }
@ -1289,7 +1290,7 @@ class ZipFile implements ZipConstants, Closeable {
private final int readFullyAt(byte[] buf, int off, int len, long pos) private final int readFullyAt(byte[] buf, int off, int len, long pos)
throws IOException throws IOException
{ {
synchronized(zfile) { synchronized (zfile) {
zfile.seek(pos); zfile.seek(pos);
int N = len; int N = len;
while (N > 0) { while (N > 0) {
@ -1305,7 +1306,7 @@ class ZipFile implements ZipConstants, Closeable {
private final int readAt(byte[] buf, int off, int len, long pos) private final int readAt(byte[] buf, int off, int len, long pos)
throws IOException throws IOException
{ {
synchronized(zfile) { synchronized (zfile) {
zfile.seek(pos); zfile.seek(pos);
return zfile.read(buf, off, len); return zfile.read(buf, off, len);
} }
@ -1476,7 +1477,7 @@ class ZipFile implements ZipConstants, Closeable {
int hsh = 0; int hsh = 0;
int pos = 0; int pos = 0;
int limit = cen.length - ENDHDR; int limit = cen.length - ENDHDR;
while (pos + CENHDR <= limit) { while (pos + CENHDR <= limit) {
if (i >= total) { if (i >= total) {
// This will only happen if the zip file has an incorrect // This will only happen if the zip file has an incorrect
// ENDTOT field, which usually means it contains more than // ENDTOT field, which usually means it contains more than
@ -1544,7 +1545,7 @@ class ZipFile implements ZipConstants, Closeable {
* array has enough room at the end to try again with a * array has enough room at the end to try again with a
* slash appended if the first table lookup does not succeed. * slash appended if the first table lookup does not succeed.
*/ */
while(true) { while (true) {
/* /*
* Search down the target hash chain for a entry whose * Search down the target hash chain for a entry whose
* 32 bit hash matches the hashed name. * 32 bit hash matches the hashed name.

View file

@ -98,7 +98,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants {
public ZipInputStream(InputStream in, Charset charset) { public ZipInputStream(InputStream in, Charset charset) {
super(new PushbackInputStream(in, 512), new Inflater(true), 512); super(new PushbackInputStream(in, 512), new Inflater(true), 512);
usesDefaultInflater = true; usesDefaultInflater = true;
if(in == null) { if (in == null) {
throw new NullPointerException("in is null"); throw new NullPointerException("in is null");
} }
if (charset == null) if (charset == null)
@ -283,7 +283,7 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants {
if (get32(tmpbuf, 0) != LOCSIG) { if (get32(tmpbuf, 0) != LOCSIG) {
return null; return null;
} }
// get flag first, we need check EFS. // get flag first, we need check USE_UTF8.
flag = get16(tmpbuf, LOCFLG); flag = get16(tmpbuf, LOCFLG);
// get the entry name and create the ZipEntry first // get the entry name and create the ZipEntry first
int len = get16(tmpbuf, LOCNAM); int len = get16(tmpbuf, LOCNAM);
@ -295,8 +295,8 @@ class ZipInputStream extends InflaterInputStream implements ZipConstants {
b = new byte[blen]; b = new byte[blen];
} }
readFully(b, 0, len); readFully(b, 0, len);
// Force to use UTF-8 if the EFS bit is ON, even the cs is NOT UTF-8 // Force to use UTF-8 if the USE_UTF8 bit is ON
ZipEntry e = createZipEntry(((flag & EFS) != 0) ZipEntry e = createZipEntry(((flag & USE_UTF8) != 0)
? zc.toStringUTF8(b, len) ? zc.toStringUTF8(b, len)
: zc.toString(b, len)); : zc.toString(b, len));
// now get the remaining fields for the entry // now get the remaining fields for the entry

View file

@ -97,6 +97,7 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
throw new IOException("Stream closed"); throw new IOException("Stream closed");
} }
} }
/** /**
* Compression method for uncompressed (STORED) entries. * Compression method for uncompressed (STORED) entries.
*/ */
@ -232,7 +233,7 @@ class ZipOutputStream extends DeflaterOutputStream implements ZipConstants {
throw new ZipException("duplicate entry: " + e.name); throw new ZipException("duplicate entry: " + e.name);
} }
if (zc.isUTF8()) if (zc.isUTF8())
e.flag |= EFS; e.flag |= USE_UTF8;
current = new XEntry(e, written); current = new XEntry(e, written);
xentries.add(current); xentries.add(current);
writeLOC(current); writeLOC(current);

View file

@ -88,7 +88,6 @@ class ZipUtils {
} }
/** /**
/*
* Converts DOS time to Java time (number of milliseconds since epoch). * Converts DOS time to Java time (number of milliseconds since epoch).
*/ */
public static long dosToJavaTime(long dtime) { public static long dosToJavaTime(long dtime) {

View file

@ -46,7 +46,7 @@
* <li><a id="lang_encoding">APPENDIX D of</a> * <li><a id="lang_encoding">APPENDIX D of</a>
* <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT"> * <a href="http://www.pkware.com/documents/casestudies/APPNOTE.TXT">
* PKWARE ZIP File Format Specification</a> - Language Encoding Flag * PKWARE ZIP File Format Specification</a> - Language Encoding Flag
* (EFS) to encode ZIP entry filename and comment fields using UTF-8. * to encode ZIP entry filename and comment fields using UTF-8.
* <li><a href="http://www.ietf.org/rfc/rfc1950.txt"> * <li><a href="http://www.ietf.org/rfc/rfc1950.txt">
* ZLIB Compressed Data Format Specification version 3.3</a> * ZLIB Compressed Data Format Specification version 3.3</a>
* &nbsp; * &nbsp;

View file

@ -43,11 +43,11 @@ class ZipConstants {
static final int METHOD_AES = 99; static final int METHOD_AES = 99;
/* /*
* General purpose big flag * General purpose bit flag
*/ */
static final int FLAG_ENCRYPTED = 0x01; static final int FLAG_ENCRYPTED = 0x01;
static final int FLAG_DATADESCR = 0x08; // crc, size and csize in dd static final int FLAG_DATADESCR = 0x08; // crc, size and csize in dd
static final int FLAG_EFS = 0x800; // If this bit is set the filename and static final int FLAG_USE_UTF8 = 0x800; // If this bit is set the filename and
// comment fields for this file must be // comment fields for this file must be
// encoded using UTF-8. // encoded using UTF-8.
/* /*

View file

@ -1374,7 +1374,7 @@ class ZipFileSystem extends FileSystem {
// store size, compressed size, and crc-32 in LOC header // store size, compressed size, and crc-32 in LOC header
e.flag = 0; e.flag = 0;
if (zc.isUTF8()) if (zc.isUTF8())
e.flag |= FLAG_EFS; e.flag |= FLAG_USE_UTF8;
OutputStream os; OutputStream os;
if (useTempFile) { if (useTempFile) {
e.file = getTempPathForEntry(null); e.file = getTempPathForEntry(null);

View file

@ -114,7 +114,7 @@ public class ZipCoding {
testZipInputStream(bis, cs, name, comment, bb); testZipInputStream(bis, cs, name, comment, bb);
if ("utf-8".equals(csn)) { if ("utf-8".equals(csn)) {
// EFS should be set // USE_UTF8 should be set
bis.reset(); bis.reset();
testZipInputStream(bis, Charset.forName("MS932"), name, comment, bb); testZipInputStream(bis, Charset.forName("MS932"), name, comment, bb);
} }