From 3a179b33ef4299990486901782802a626bb68b88 Mon Sep 17 00:00:00 2001
From: mio <stigma@disroot.org>
Date: Wed, 16 Apr 2025 19:33:53 +1000
Subject: ark: Fix unzip v6 date parsing

unzip v6 changed the date format from MM-DD-YY to YYYY-MM-DD.

Fixes: https://bugs.trinitydesktop.org/show_bug.cgi?id=3207
Signed-off-by: mio <stigma@disroot.org>
---
 ark/zip.cpp | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 53 insertions(+), 4 deletions(-)

diff --git a/ark/zip.cpp b/ark/zip.cpp
index e7c49fb..88bd97d 100644
--- a/ark/zip.cpp
+++ b/ark/zip.cpp
@@ -34,6 +34,7 @@
 #include <tdelocale.h>
 #include <tdemessagebox.h>
 #include <tdeprocess.h>
+#include <tdeprocio.h>
 #include <kpassdlg.h>
 
 // ark includes
@@ -50,18 +51,66 @@ ZipArch::ZipArch( ArkWidget *_gui, const TQString & _fileName )
   verifyCompressUtilityIsAvailable( m_archiver_program );
   verifyUncompressUtilityIsAvailable( m_unarchiver_program );
 
+  // Compatibility with unzip v5 and v6.
+  //  - unzip 5 prints dates as MM-DD-YY.
+  //  - unzip 6 prints dates as YYYY-MM-DD.
+  // Presume version 6 as it was released in 2009.
+  bool unzipV5 = false;
+  if (m_bUnarchUtilityIsAvailable)
+  {
+    TDEProcIO proc;
+    proc << m_unarchiver_program;
+    proc << "-v";
+    if (proc.start(TDEProcIO::Block))
+    {
+      proc.wait();
+      if (proc.normalExit() && proc.exitStatus() == 0)
+      {
+        TQString line;
+        proc.readln(line);
+        auto parts = TQStringList::split(' ', line);
+        unzipV5 = (parts.size() >= 2) && (parts[1][0] == '5');
+      }
+    }
+  }
+
   m_headerString = "----";
-  m_repairYear = 9; m_fixMonth = 7; m_fixDay = 8; m_fixTime = 10;
+  m_fixTime = 10;
   m_dateCol = 5;
   m_numCols = 7;
 
+  if (unzipV5)
+  {
+    kdDebug(1601) << "ZipArch: unzip v5 detected." << endl;
+    m_repairYear = 9;
+    m_fixMonth = 7;
+    m_fixDay = 8;
+  }
+  else
+  {
+    m_fixYear = 7;
+    m_fixMonth = 8;
+    m_fixDay = 9;
+  }
+
   m_archCols.append( new ArchColumns( 1, TQRegExp( "[0-9]+" ) ) );
   m_archCols.append( new ArchColumns( 2, TQRegExp( "[^\\s]+" ) ) );
   m_archCols.append( new ArchColumns( 3, TQRegExp( "[0-9]+" ) ) );
   m_archCols.append( new ArchColumns( 4, TQRegExp( "[0-9.]+%" ) ) );
-  m_archCols.append( new ArchColumns( 7, TQRegExp( "[01][0-9]" ), 2 ) );
-  m_archCols.append( new ArchColumns( 8, TQRegExp( "[0-3][0-9]" ), 2 ) );
-  m_archCols.append( new ArchColumns( 9, TQRegExp( "[0-9][0-9]" ), 2 ) );
+
+  if (unzipV5)
+  {
+    m_archCols.append( new ArchColumns( 7, TQRegExp( "[01][0-9]" ), 2 ) );
+    m_archCols.append( new ArchColumns( 8, TQRegExp( "[0-3][0-9]" ), 2 ) );
+    m_archCols.append( new ArchColumns( 9, TQRegExp( "[0-9][0-9]" ), 2 ) );
+  }
+  else
+  {
+    m_archCols.append( new ArchColumns( 7, TQRegExp( "[0-9]{4}" ), 4 ) );
+    m_archCols.append( new ArchColumns( 8, TQRegExp( "[01][0-9]" ), 2 ) );
+    m_archCols.append( new ArchColumns( 9, TQRegExp( "[0-3][0-9]" ), 2 ) );
+  }
+
   m_archCols.append( new ArchColumns( 10, TQRegExp( "[0-9:]+" ), 6 ) );
   m_archCols.append( new ArchColumns( 6, TQRegExp( "[a-fA-F0-9]+ {2}" ) ) );
   m_archCols.append( new ArchColumns( 0, TQRegExp( "[^\\n]+" ), 4096 ) );
-- 
cgit v1.2.3

