Fix for [Bug 1533748] (./ prefixed file names) and tests for [Bug 1011492] (zip files...
authorPat Thoyts <patthoyts@users.sourceforge.net>
Thu, 22 Jan 2009 15:15:19 +0000 (15:15 +0000)
committerPat Thoyts <patthoyts@users.sourceforge.net>
Thu, 22 Jan 2009 15:15:19 +0000 (15:15 +0000)
library/zipvfs.tcl
tests/vfsZip.test

index 84a64d1951643601e88dfadf4d25ab4a59b458f8..361c80b2021a6054e5083c5a88118a1e042d5766 100644 (file)
@@ -450,7 +450,7 @@ proc zip::TOC {fd arr} {
     } else {
        set sb(type) file
     }
-    set sb(name) [read $fd [u_short $flen]]
+    set sb(name) [string trimleft [read $fd [u_short $flen]] "./"]
     set sb(extra) [read $fd [u_short $elen]]
     set sb(comment) [read $fd [u_short $clen]]
     if {$sb(flags) & (1 << 10)} {
index 7411b665d1af6962edbe4ee51c275bba87c376c0..08dd3c98ef80509bba24faff794e2672e91f4e6c 100644 (file)
@@ -33,6 +33,16 @@ if {[testConstraint zipfs] && [testConstraint zipexe]} {
     makeFile {File aleph two} zipfs.test/Aleph/Two.txt
     eval exec [auto_execok zip] [list -r zipfs.zip zipfs.test]
     eval exec [auto_execok zip] [list zipnest.zip zipfs.zip]
+
+    testConstraint zipcat [expr {![catch {
+        makeFile {} zipcat.zip
+        set f [open zipcat.zip w] ; fconfigure $f -translation binary
+        set fin [open zipfs.zip r] ; fconfigure $fin -translation binary
+        puts -nonewline $f "[string repeat # 4095]\xff"
+        fcopy $fin $f
+        close $fin ; close $f
+        eval exec [auto_execok zip] [list -A zipcat.zip]
+    }]}]
 }
 
 test vfsZip-1.1 "mount non-existent zip file" -constraints {zipfs} -setup {
@@ -259,6 +269,24 @@ test vfsZip-3.1 "bug #: ./ prefixed filenames" -constraints {zipfs zipexe bug153
     vfs::unmount vfszip31
 } -result {1}
 
+test vfsZip-4.0 "zip with preface code" -constraints {zipfs zipcat} -body {
+    vfs::zip::Mount zipcat.zip local
+    set r [glob -nocomplain -directory local -tails *]
+    vfs::unmount local
+    set r
+} -result {zipfs.test}
+
+test vfsZip-4.1 "zip with preface code" -constraints {zipfs zipcat} -setup {
+    vfs::zip::Mount zipcat.zip local
+} -body {
+    set f [open local/zipfs.test/Aleph/One.txt r]
+    set r [string trim [read $f]]
+    close $f
+    set r
+} -cleanup {
+    vfs::unmount local
+} -result {File aleph one}
+
 test vfsZip-9.0 "attempt to delete mounted file" -constraints {zipfs zipexe} -setup {
     vfs::zip::Mount zipfs.zip local
 } -body {
@@ -267,6 +295,7 @@ test vfsZip-9.0 "attempt to delete mounted file" -constraints {zipfs zipexe} -se
     vfs::unmount local
 } -returnCodes {error} -result {error deleting "zipfs.zip": permission denied}
 
+
 # cleanup
 if {[testConstraint zipfs] && [testConstraint zipexe]} {
     file delete -force zipfs.test