Don't allow dates prior to 1980-01-01
authorMaximilian Mader <maximilian.mader@gmx.de>
Sat, 3 Aug 2013 21:56:13 +0000 (23:56 +0200)
committerMaximilian Mader <maximilian.mader@gmx.de>
Sat, 3 Aug 2013 21:56:13 +0000 (23:56 +0200)
See WoltLab/WCF#1443

Zip doesn't support dates prior to `1980-01-01 00:00 UTC`

wcfsetup/install/files/lib/system/io/ZipWriter.class.php

index 39dc4c14d283b102ba5b9cc073f8440fd1976bbf..08c2e1d9e2873bee799ac250b5281b3775d89db5 100644 (file)
@@ -2,6 +2,7 @@
 namespace wcf\system\io;
 use wcf\util\FileUtil;
 use wcf\util\StringUtil;
+use wcf\system\exception\SystemException;
 
 /**
  * Creates a Zip file archive.
@@ -81,9 +82,14 @@ class ZipWriter {
         * 
         * @param       string          $data           content of the file
         * @param       string          $name           filename
-        * @param       integer         $date           file creation time as unix timestamp
+        * @param       integer         $date           file creation time as unix timestamp, must at least be 315532800 (1980-01-01 00:00 UTC)
         */
-       public function addFile($data, $name, $date = 0) {
+       public function addFile($data, $name, $date = TIME_NOW) {
+               // 315532800 is the same as strtotime('1980-01-01 00:00 UTC')
+               if ($date < 315532800) {
+                       throw new SystemException('Unsupported date, must be at least 315532800 (1980-01-01 00:00 UTC)');
+               }
+               
                // replace backward slashes with forward slashes in the filename
                $name = StringUtil::replace("\\", "/", $name);