final StringBuilder s = new StringBuilder(256); final Formatter f = new Formatter(s) .format("%s[name=%s", getClass().getName(), getName()); long value; if (UNKNOWN != (value = getGeneralPurposeBitFlags())) f.format(", gpbf=0x%04X", value); if (UNKNOWN != (value = getMethod())) f.format(", method=%d", value); if (UNKNOWN != (value = getTime())) f.format(", time=%tc", value); if (UNKNOWN != (value = getCrc())) f.format(", crc=0x%08X", value); if (UNKNOWN != (value = getCompressedSize())) f.format(", compressedSize=%d", value); if (UNKNOWN != (value = getSize())) f.format(", size=%d", value); if (UNKNOWN != (value = getExternalAttributes())) f.format(", ea=0x%08X", value); final String comment = getComment(); if (null != comment) f.format(", comment=\"%s\"", comment);
@Override public ZipEntry newEntry(String name) { return new ZipEntry(name); } }
/** * Returns a clone of the entry for the given name or {@code null} if no * entry with this name exists. * * @param name the name of the ZIP entry. */ @Override public ZipEntry getEntry(String name) { final ZipEntry ze = super.getEntry(name); return ze != null ? ze.clone() : null; }
final boolean isZip64ExtensionsRequired() { // Offset MUST be considered in decision about ZIP64 format - see // description of Data Descriptor in ZIP File Format Specification! if (FORCE_ZIP64_EXT) return true /*UNKNOWN != getCompressedSize() || UNKNOWN != getSize() || UNKNOWN != getOffset()*/; else return UInt.MAX_VALUE <= getCompressedSize() || UInt.MAX_VALUE <= getSize() || UInt.MAX_VALUE <= getOffset(); }
final boolean isDataDescriptorRequired() { return UNKNOWN == (getCrc() | getCompressedSize() | getSize()); }
entry.setGeneralPurposeBitFlags(gpbf); off += 2; // General Purpose Bit Flags entry.setRawMethod(readUShort(lfh, off)); off += 2; entry.setRawTime(readUInt(lfh, off)); off += 4; entry.setRawCrc(readUInt(lfh, off)); off += 4; entry.setRawCompressedSize(readUInt(lfh, off)); off += 4; entry.setRawSize(readUInt(lfh, off)); off += 4; entry.setRawOffset(mapper.unmap(fp)); entry.setRawExtraFields(extra); if (entry.getGeneralPurposeBitFlag(GPBF_DATA_DESCRIPTOR)) { fp, length - fp); WinZipAesEntryExtraField field = null; int method = entry.getMethod(); if (entry.isEncrypted()) { if (WINZIP_AES != method)
final long csize = entry.getCompressedSize(); final long size = entry.getSize(); dos.writeShort((entry.getRawPlatform() << 8) | 63); dos.writeShort(entry.getRawVersionNeededToExtract()); dos.writeShort(entry.getGeneralPurposeBitFlags()); dos.writeShort(entry.getRawMethod()); dos.writeInt((int) entry.getRawTime()); dos.writeInt((int) entry.getRawCrc()); dos.writeInt((int) entry.getRawCompressedSize()); dos.writeInt((int) entry.getRawSize()); final byte[] name = encode(entry.getName()); dos.writeShort(name.length); final byte[] extra = entry.getRawExtraFields(); dos.writeShort(extra.length); dos.writeInt((int) entry.getRawExternalAttributes()); dos.writeInt((int) entry.getRawOffset());
entry.setRawPlatform(readUShort(cfh, off) >> 8); off += 2; entry.setGeneralPurposeBitFlags(gpbf); off += 2; // General Purpose Bit Flags entry.setRawMethod(readUShort(cfh, off)); off += 2; entry.setRawTime(readUInt(cfh, off)); off += 4; entry.setRawCrc(readUInt(cfh, off)); off += 4; entry.setRawCompressedSize(readUInt(cfh, off)); off += 4; entry.setRawSize(readUInt(cfh, off)); off += 4; entry.setRawExternalAttributes(readUInt(cfh, off)); off += 4; entry.setRawOffset(lfhOff); // must be unmapped! final byte[] extra = new byte[extraLen]; rof.readFully(extra); entry.setRawExtraFields(extra);
@Test public void testExtra() { assertEquals(0, entry.getExtra().length); }; entry.setRawSize(UInt.MAX_VALUE); entry.setRawCompressedSize(UInt.MAX_VALUE); entry.setRawOffset(UInt.MAX_VALUE); entry.setRawExtraFields(set); // this must be last in the sequence! assertEquals(0x0fedcba987654321L, entry.getSize()); assertEquals(UInt.MAX_VALUE, entry.getRawSize()); assertEquals(0x0fedcba987654322L, entry.getCompressedSize()); assertEquals(UInt.MAX_VALUE, entry.getRawCompressedSize()); assertEquals(0x0fedcba987654323L, entry.getOffset()); assertEquals(UInt.MAX_VALUE, entry.getRawOffset()); byte[] got1 = entry.getRawExtraFields(); assertNotNull(got1); assertNotSame(set, got1); final byte[] got2 = entry.getRawExtraFields(); assertNotNull(got2); assertNotSame(set, got2);
/** * @param parentName * @param entry * @param entryName * @param correlationId * @return */ private ResourceId submitDirectory(final URI parentName, ZipEntry entry, String entryName, ResourceId correlationId) { IdentificationResultImpl result = new IdentificationResultImpl(); long size = entry.getSize(); long time = entry.getTime(); RequestMetaData metaData = new RequestMetaData( size != -1 ? size : null, time != -1 ? time : null, entryName); RequestIdentifier identifier = new RequestIdentifier( ArchiveFileUtils.toZipUri(parentName, entry.getName())); result.setRequestMetaData(metaData); result.setIdentifier(identifier); return resultHandler.handleDirectory(result, correlationId, false); }
AesKeyStrength getKeyStrength() throws ZipKeyException { return param.getKeyStrength(entry.getName()); }
for (int i = FIRST_ENTRY; i <= LAST_ENTRY; i++) { final String name = Integer.toString(i); final ZipEntry entry = new ZipEntry(name); entry.setSize(data.length); entry.setCompressedSize(data.length); entry.setCrc(DATA_CRC); entry.setMethod(STORED); final ZipEntry entry = e.nextElement(); assertEquals(data.length, entry.getSize()); assertTrue(set.remove(entry.getName()));
assert UNKNOWN != entry.getCrc(); return processor; int method = entry.getMethod(); if (UNKNOWN == method) entry.setRawMethod(method = getMethod()); boolean skipCrc = false; if (entry.isEncrypted() || WINZIP_AES == method) { ZipCryptoParameters param = getCryptoParameters(); if (WINZIP_AES == method) { param = parameters(WinZipAesParameters.class, param); final WinZipAesEntryExtraField field = (WinZipAesEntryExtraField) entry.getExtraField(WINZIP_AES_ID); if (null != field) { method = field.getMethod(); break; default: throw new ZipException(entry.getName() + " (unsupported compression method " + method
if (entry == null) return null; long fp = entry.getOffset(); assert UNKNOWN != fp; fp = mapper.map(fp); try { erof = new EntryReadOnlyFile( fp, entry.getCompressedSize()); } catch (IllegalArgumentException ex) { throw (IOException) new ZipException(name + assert UNKNOWN != entry.getCrc(); return new ReadOnlyFileInputStream(erof); check = entry.isEncrypted(); int method = entry.getMethod(); if (entry.isEncrypted()) { if (WINZIP_AES != method) throw new ZipException(name = (WinZipAesEntryExtraField) entry.getExtraField(WINZIP_AES_ID); method = field.getMethod(); if (entry.getGeneralPurposeBitFlag(GPBF_DATA_DESCRIPTOR)) { rof.seek(fp + entry.getCompressedSize()); rof.readFully(dd); localCrc = readUInt(dd, 0);
@Override public void close() throws IOException { if (!closed) { while (skip(Long.MAX_VALUE) > 0) { // process CRC-32 until EOF } } super.close(); closed = true; final long expected = entry.getCrc(); final long computed = getChecksum().getValue(); if (expected != computed) throw new CRC32Exception(entry.getName(), expected, computed); } }
@Override public ZipEntry newEntry(String name) { ZipEntry entry = new ZipEntry(name); entry.setEncrypted(true); return entry; }