Skip to content

Commit

Permalink
#473 set lastModifiedFileTime for all entries and not just directories
Browse files Browse the repository at this point in the history
  • Loading branch information
srikanth-lingala committed Sep 7, 2022
1 parent 0ffcaec commit 7a74670
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 12 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -78,18 +78,7 @@ public ZipOutputStream(OutputStream outputStream, char[] password, Zip4jConfig z

public void putNextEntry(ZipParameters zipParameters) throws IOException {
verifyZipParameters(zipParameters);

ZipParameters clonedZipParameters = new ZipParameters(zipParameters);
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());
}
}
ZipParameters clonedZipParameters = cloneAndPrepareZipParameters(zipParameters);
initializeAndWriteFileHeader(clonedZipParameters);

//Initialisation of below compressedOutputStream should happen after writing local file header
Expand Down Expand Up @@ -257,4 +246,21 @@ private boolean writeCrc(FileHeader fileHeader) {

return fileHeader.getAesExtraDataRecord().getAesVersion().equals(AesVersion.ONE);
}

private ZipParameters cloneAndPrepareZipParameters(ZipParameters zipParameters) {
ZipParameters clonedZipParameters = new ZipParameters(zipParameters);

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());
}

return clonedZipParameters;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@
import net.lingala.zip4j.AbstractIT;
import net.lingala.zip4j.ZipFile;
import net.lingala.zip4j.exception.ZipException;
import net.lingala.zip4j.io.inputstream.ZipInputStream;
import net.lingala.zip4j.model.FileHeader;
import net.lingala.zip4j.model.LocalFileHeader;
import net.lingala.zip4j.model.Zip4jConfig;
import net.lingala.zip4j.model.ZipParameters;
import net.lingala.zip4j.model.enums.AesKeyStrength;
Expand All @@ -18,6 +20,7 @@
import org.junit.Test;
import org.junit.rules.ExpectedException;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
Expand Down Expand Up @@ -288,6 +291,25 @@ public void testPutNextEntryWithNullFileNameInZipParameters() throws IOException
}
}

@Test
public void testLastModifiedTimeIsSetWhenItIsNotExplicitlySet() throws IOException {
long currentTime = System.currentTimeMillis();
ByteArrayOutputStream zip = new ByteArrayOutputStream();

try (ZipOutputStream zos = new ZipOutputStream(zip)) {
ZipParameters params = new ZipParameters();
params.setFileNameInZip("test");
zos.putNextEntry(params);
zos.closeEntry();
}

try (ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(zip.toByteArray()))) {
LocalFileHeader fileHeader = zis.getNextEntry();
long zipTime = fileHeader.getLastModifiedTimeEpoch();
assertThat(currentTime).isLessThan(zipTime + 2000);
}
}

private void testZipOutputStream(CompressionMethod compressionMethod, boolean encrypt,
EncryptionMethod encryptionMethod, AesKeyStrength aesKeyStrength,
AesVersion aesVersion)
Expand Down

0 comments on commit 7a74670

Please sign in to comment.