From c76cd6abd7fcadc5c3593144122fc92f0cd9a410 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Boutemy?= Date: Sat, 27 Sep 2025 02:03:17 +0200 Subject: [PATCH] check minimum timestamp: avoid negative Zip 5455 Extended Timestamp --- .../codehaus/plexus/archiver/zip/AbstractZipArchiver.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java b/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java index 0b4bdb5e..dccb7edc 100755 --- a/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java +++ b/src/main/java/org/codehaus/plexus/archiver/zip/AbstractZipArchiver.java @@ -698,7 +698,14 @@ protected FileTime normalizeLastModifiedTime(FileTime lastModifiedTime) { */ private static long dosToJavaTime(long dosTime) { Calendar cal = Calendar.getInstance(TimeZone.getDefault(), Locale.ROOT); + if (dosTime < MIN_DOS_JAVA_TIME) { + dosTime = MIN_DOS_JAVA_TIME; + } cal.setTimeInMillis(dosTime); return dosTime - (cal.get(Calendar.ZONE_OFFSET) + cal.get(Calendar.DST_OFFSET)); } + + // minimum DOS time that will give a positive Java time, whatever the current TZ is: + // biggest TZ offset is for Etc/GMT-14 https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + private static final long MIN_DOS_JAVA_TIME = 1000 * 14 * 3600; }