You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
As of 2.11.0, file entries added via putNextEntry have a last modified date of 1980 when ZipParameters are passed with the default lastModifiedFileTime == 0 value. 0f99010 removed some conditional logic from FileHeaderFactory.generateFileHeader:
This logic was added to putNextEntry instead, but only for directory entries:
if (isZipEntryDirectory(zipParameters.getFileNameInZip())) {
clonedZipParameters.setWriteExtendedLocalFileHeader(false);
clonedZipParameters.setCompressionMethod(CompressionMethod.STORE);
clonedZipParameters.setEncryptFiles(false);
clonedZipParameters.setEntrySize(0);
++ if (zipParameters.getLastModifiedFileTime() <= 0) {+ clonedZipParameters.setLastModifiedFileTime(System.currentTimeMillis());+ }
}
As a result, the following test, which passes for 2.10.0, fails for 2.11.0 and 2.11.1:
@TestpublicvoidrecentLastModifiedTime() throwsIOException {
longcurrentTime = System.currentTimeMillis();
ByteArrayOutputStreamzip = newByteArrayOutputStream();
try (ZipOutputStreamzos = newZipOutputStream(zip)) {
ZipParametersparams = newZipParameters();
params.setFileNameInZip("test");
zos.putNextEntry(params);
zos.write(newbyte[0]);
zos.closeEntry();
}
try (ZipInputStreamzis = newZipInputStream(newByteArrayInputStream(zip.toByteArray()))) {
ZipEntrye = zis.getNextEntry();
longzipTime = e.getTime();
// ZIP only has 2 second precision, so adjust for potential rounding.assertTrue(currentTime < zipTime + 2000,
String.format("ZIP entry modified time (%d) should be near current time (%d)",
zipTime, currentTime));
}
}
Was this change intended as part of the fix to #434, or was this an unintended side effect?
The documentation for ZipParameters.setLastModifiedTime says:
Set the last modified time recorded in the ZIP file for the added files. If less than 0, the last modified time is cleared and the current time is used
but the current time is not being used for file entries when zipParams.getLastModifiedFileTime() <= 0 like it used to.
(I noticed a separate potential bug where ZipParameters.setLastModifiedTime just returns when lastModifiedFileTime <= 0. It doesn't actually clear the current value as the documentation indicates.)
The text was updated successfully, but these errors were encountered:
I fixed both the issues you mentioned (including the one where ZipParameters.setLastModifiedTime doesn't clear the time). I modified your test case slightly and used it in the project. Thanks for the detailed issue report, I appreciate that.
Thank you for the quick fix! I'm glad my report and sample test were useful.
I'm not seeing any ZipParameters.setLastModifiedFileTime change (perhaps it wasn't git added?), but that was just an aside on my part. You fixed the issue that I was running into.
As of 2.11.0, file entries added via
putNextEntry
have a last modified date of 1980 whenZipParameters
are passed with the defaultlastModifiedFileTime == 0
value. 0f99010 removed some conditional logic fromFileHeaderFactory.generateFileHeader
:This logic was added to
putNextEntry
instead, but only for directory entries:As a result, the following test, which passes for 2.10.0, fails for 2.11.0 and 2.11.1:
Was this change intended as part of the fix to #434, or was this an unintended side effect?
The documentation for
ZipParameters.setLastModifiedTime
says:but the current time is not being used for file entries when
zipParams.getLastModifiedFileTime() <= 0
like it used to.(I noticed a separate potential bug where
ZipParameters.setLastModifiedTime
just returns whenlastModifiedFileTime <= 0
. It doesn't actually clear the current value as the documentation indicates.)The text was updated successfully, but these errors were encountered: