]> granicus.if.org Git - zziplib/commitdiff
only firstlevel subdir was made, and later dir-entries may be directories
authorGuido Draheim <guidod@gmx.de>
Mon, 5 Feb 2018 14:22:40 +0000 (15:22 +0100)
committerGuido Draheim <guidod@gmx.de>
Mon, 5 Feb 2018 14:22:40 +0000 (15:22 +0100)
bins/unzzipcat-big.c
bins/unzzipcat-mem.c
bins/unzzipcat-mix.c
bins/unzzipcat-zip.c
test/zziptests.py

index 9723842cca3e10c6675938f7dab9262c1110c90c..727116e07f3c0e87bef7962e2c38d9496ec45c9f 100644 (file)
@@ -60,10 +60,12 @@ static void makedirs(const char* name)
           char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
-      } else {
-          _zzip_mkdir(name, 775);
-          errno = 0;
+      } 
+      if (_zzip_mkdir(name, 0775) == -1 && errno != EEXIST) 
+      {
+          DBG3("while mkdir %s : %s", name, strerror(errno));
       }
+      errno = 0;
 }
 
 static FILE* create_fopen(char* name, char* mode, int subdirs)
index ed671dcaba85ee657d4b161bce7e177a4af3c7fb..8e4cd05ac6276acf53ed6f77238bfda1f44dd34e 100644 (file)
@@ -65,10 +65,12 @@ static void makedirs(const char* name)
           char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
-      } else {
-          _zzip_mkdir(name, 775);
-          errno = 0;
       }
+      if (_zzip_mkdir(name, 0775) == -1 && errno != EEXIST)
+      {
+          DBG3("while mkdir %s : %s", name, strerror(errno));
+      }
+      errno = 0;
 }
 
 static FILE* create_fopen(char* name, char* mode, int subdirs)
index c51064337ebc2b3e665e2dde8c4ccaed0d059b15..cba85c4cb3d3c500d0681fd9a313b3b9fa171c59 100644 (file)
@@ -76,10 +76,12 @@ static void makedirs(const char* name)
           char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
-      } else {
-          _zzip_mkdir(name, 775);
-          errno = 0;
       }
+      if (_zzip_mkdir(name, 0775) == -1 && errno != EEXIST)
+      {
+          DBG3("while mkdir %s : %s", name, strerror(errno));
+      }
+      errno = 0;
 }
 
 static FILE* create_fopen(char* name, char* mode, int subdirs)
index e77f641ffece7844010dac1b8f9305f676472009..d3644cb58abbea81be666a7a0b76e61f31ad6ad6 100644 (file)
@@ -13,6 +13,7 @@
 #include <zzip/__mkdir.h>
 #include <zzip/__string.h>
 #include <zzip/__fnmatch.h>
+#include <zzip/__debug.h>
 #include "unzzipcat-zip.h"
 #include "unzzip-states.h"
 
@@ -75,10 +76,12 @@ static void makedirs(const char* name)
           char* dir_name = _zzip_strndup(name, p-name);
           makedirs(dir_name);
           free (dir_name);
-      } else {
-          _zzip_mkdir(name, 775);
-          errno = 0;
+      } 
+      if (_zzip_mkdir(name, 0775) == -1 && errno != EEXIST)
+      {
+          DBG3("while mkdir %s : %s", name, strerror(errno));
       }
+      errno = 0;
 }
 
 static FILE* create_fopen(char* name, char* mode, int subdirs)
@@ -92,7 +95,7 @@ static FILE* create_fopen(char* name, char* mode, int subdirs)
           free (dir_name);
       }
    }
-   return fopen(name, mode);      
+   return fopen(name, mode);
 }
 
 static int unzzip_cat (int argc, char ** argv, int extract)
@@ -123,7 +126,8 @@ static int unzzip_cat (int argc, char ** argv, int extract)
            FILE* out = stdout;
            if (extract) out = create_fopen(name, "w", 1);
            if (! out) {
-               done = EXIT_ERRORS;
+               DBG3("fopen' %s : %s", name, strerror(errno));
+               if (errno != EISDIR) done = EXIT_ERRORS;
                continue;
            }
            unzzip_cat_file (disk, name, out);
@@ -144,7 +148,8 @@ static int unzzip_cat (int argc, char ** argv, int extract)
                    FILE* out = stdout;
                    if (extract) out = create_fopen(name, "w", 1);
                    if (! out) {
-                       done = EXIT_ERRORS;
+                       DBG3("fopen. %s : %s", name, strerror(errno));
+                       if (errno != EISDIR) done = EXIT_ERRORS;
                        continue;
                    }
                    unzzip_cat_file (disk, name, out);
index 93219305ec7461ae222c518b02f93674b2e384f0..03a8c656a0615c8ee8164ed2588dcdc652a1c5cf 100644 (file)
@@ -1267,13 +1267,14 @@ class ZZipTest(unittest.TestCase):
   def test_20595_zzextract_zap_test5_zip(self):
     """ run zzextract-zap on test5.zip 
         => coughs up a SEGFAULT in zzip_dir_close() ?!?"""
+    self.rm_testdir()
     zipfile = "test5.zip"
     getfile = "test5.zip"
     tmpdir = self.testdir()
     exe = self.bins("unzzip")
-    run = shell("cd {tmpdir} && ../{exe} ../{getfile} ".format(**locals()))
+    run = shell("cd {tmpdir} && ../{exe} ../{getfile} ".format(**locals()));
     self.assertTrue(tmpdir+'/subdir1/subdir2/file3-1024.txt')
-    self.rm_testdir()
+    self.rm_testdir()
 
   url_CVE_2017_5977 = "https://github.com/asarubbo/poc/blob/master"
   zip_CVE_2017_5977 = "00153-zziplib-invalidread-zzip_mem_entry_extra_block"