Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | zipfs mount_data -> mountdata |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | zipfs-consolidation |
Files: | files | file ages | folders |
SHA3-256: |
731b44b4c730e74d55705c12fc800e81 |
User & Date: | apnadkarni 2024-08-05 14:05:00.428 |
References
2024-08-05
| ||
23:10 | • Ticket [7db9574a06] Undocumented features of zipfs implementation status still Open with 3 other changes artifact: c7415756b2 user: tberg | |
Context
2024-08-05
| ||
22:21 | resolution of ticket [b9f3ff8fe6] check-in: f6bfd7c52a user: Torsten tags: zipfs-consolidation | |
14:05 | zipfs mount_data -> mountdata check-in: 731b44b4c7 user: apnadkarni tags: zipfs-consolidation | |
13:36 | Make zipfs inaccessible to safe interps. See bug [a47b587499] check-in: a0d527efb5 user: apnadkarni tags: zipfs-consolidation | |
Changes
Changes to doc/zipfs.n.
︙ | ︙ | |||
25 26 27 28 29 30 31 | \fBzipfs mkkey\fI password\fR \fBzipfs mkzip\fI outfile indir\fR ?\fIstrip\fR? ?\fIpassword\fR? \fBzipfs mount\fR ?\fIzipfile\fR? ?\fImountpoint\fR? ?\fIpassword\fR? \fBzipfs root\fR \fBzipfs unmount\fI mountpoint\fR .fi '\" The following subcommand is *UNDOCUMENTED* | | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | \fBzipfs mkkey\fI password\fR \fBzipfs mkzip\fI outfile indir\fR ?\fIstrip\fR? ?\fIpassword\fR? \fBzipfs mount\fR ?\fIzipfile\fR? ?\fImountpoint\fR? ?\fIpassword\fR? \fBzipfs root\fR \fBzipfs unmount\fI mountpoint\fR .fi '\" The following subcommand is *UNDOCUMENTED* '\" \fBzipfs mountdata\fR ?\fIdata\fR ?\fImountpoint\fR?? .BE .SH DESCRIPTION .PP The \fBzipfs\fR command provides Tcl with the ability to mount the contents of a ZIP archive file as a virtual file system. Tcl's ZIP archive support is limited to basic features and options. Supported storage methods include only STORE and DEFLATE with optional |
︙ | ︙ |
Changes to generic/tclBasic.c.
︙ | ︙ | |||
474 475 476 477 478 479 480 | {"zipfs", "list"}, {"zipfs", "lmkimg"}, {"zipfs", "lmkzip"}, {"zipfs", "mkimg"}, {"zipfs", "mkkey"}, {"zipfs", "mkzip"}, {"zipfs", "mount"}, | | | 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 | {"zipfs", "list"}, {"zipfs", "lmkimg"}, {"zipfs", "lmkzip"}, {"zipfs", "mkimg"}, {"zipfs", "mkkey"}, {"zipfs", "mkzip"}, {"zipfs", "mount"}, {"zipfs", "mountdata"}, {"zipfs", "root"}, {"zipfs", "unmount"}, {NULL, NULL} }; /* * Math functions. All are safe. |
︙ | ︙ |
Changes to generic/tclZipfs.c.
︙ | ︙ | |||
2624 2625 2626 2627 2628 2629 2630 | } /* *------------------------------------------------------------------------- * * ZipFSMountBufferObjCmd -- * | | | 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 | } /* *------------------------------------------------------------------------- * * ZipFSMountBufferObjCmd -- * * This procedure is invoked to process the [zipfs mountdata] command. * * Results: * A standard Tcl result. * * Side effects: * A ZIP archive file is mounted, resources are allocated. * |
︙ | ︙ | |||
6199 6200 6201 6202 6203 6204 6205 | #ifdef HAVE_ZLIB static const EnsembleImplMap initMap[] = { {"mkimg", ZipFSMkImgObjCmd, NULL, NULL, NULL, 1}, {"mkzip", ZipFSMkZipObjCmd, NULL, NULL, NULL, 1}, {"lmkimg", ZipFSLMkImgObjCmd, NULL, NULL, NULL, 1}, {"lmkzip", ZipFSLMkZipObjCmd, NULL, NULL, NULL, 1}, {"mount", ZipFSMountObjCmd, NULL, NULL, NULL, 1}, | | | 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 | #ifdef HAVE_ZLIB static const EnsembleImplMap initMap[] = { {"mkimg", ZipFSMkImgObjCmd, NULL, NULL, NULL, 1}, {"mkzip", ZipFSMkZipObjCmd, NULL, NULL, NULL, 1}, {"lmkimg", ZipFSLMkImgObjCmd, NULL, NULL, NULL, 1}, {"lmkzip", ZipFSLMkZipObjCmd, NULL, NULL, NULL, 1}, {"mount", ZipFSMountObjCmd, NULL, NULL, NULL, 1}, {"mountdata", ZipFSMountBufferObjCmd, NULL, NULL, NULL, 1}, {"unmount", ZipFSUnmountObjCmd, NULL, NULL, NULL, 1}, {"mkkey", ZipFSMkKeyObjCmd, NULL, NULL, NULL, 1}, {"exists", ZipFSExistsObjCmd, NULL, NULL, NULL, 1}, {"info", ZipFSInfoObjCmd, NULL, NULL, NULL, 1}, {"list", ZipFSListObjCmd, NULL, NULL, NULL, 1}, {"canonical", ZipFSCanonicalObjCmd, NULL, NULL, NULL, 1}, {"root", ZipFSRootObjCmd, NULL, NULL, NULL, 1}, |
︙ | ︙ |
Changes to tests/interp.test.
︙ | ︙ | |||
16 17 18 19 20 21 22 | } ::tcltest::loadTestedCommands catch [list package require -exact tcl::test [info patchlevel]] testConstraint testinterpdelete [llength [info commands testinterpdelete]] | | | 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | } ::tcltest::loadTestedCommands catch [list package require -exact tcl::test [info patchlevel]] testConstraint testinterpdelete [llength [info commands testinterpdelete]] set hidden_cmds {cd encoding exec exit fconfigure file glob load open pwd socket source tcl:encoding:dirs tcl:encoding:system tcl:file:atime tcl:file:attributes tcl:file:copy tcl:file:delete tcl:file:dirname tcl:file:executable tcl:file:exists tcl:file:extension tcl:file:home tcl:file:isdirectory tcl:file:isfile tcl:file:link tcl:file:lstat tcl:file:mkdir tcl:file:mtime tcl:file:nativename tcl:file:normalize tcl:file:owned tcl:file:readable tcl:file:readlink tcl:file:rename tcl:file:rootname tcl:file:size tcl:file:stat tcl:file:tail tcl:file:tempdir tcl:file:tempfile tcl:file:tildeexpand tcl:file:type tcl:file:volumes tcl:file:writable tcl:info:cmdtype tcl:info:nameofexecutable tcl:process:autopurge tcl:process:list tcl:process:purge tcl:process:status tcl:zipfs:canonical tcl:zipfs:exists tcl:zipfs:info tcl:zipfs:list tcl:zipfs:lmkimg tcl:zipfs:lmkzip tcl:zipfs:mkimg tcl:zipfs:mkkey tcl:zipfs:mkzip tcl:zipfs:mount tcl:zipfs:mountdata tcl:zipfs:root tcl:zipfs:unmount unload zipfs} proc _ms_limit_args {ms {t0 {}}} { if {$t0 eq {}} { set t0 [clock milliseconds] } incr t0 $ms list -seconds [expr {$t0 / 1000}] -milliseconds [expr {$t0 % 1000}] } |
︙ | ︙ |
Changes to tests/zipfs.test.
︙ | ︙ | |||
148 149 150 151 152 153 154 | test zipfs-2.8 {zipfs mkzip} -constraints zipfs -body { cd $tcl_library/encoding zipfs mkzip $zipfile . set fin [open $zipfile r] fconfigure $fin -translation binary set dat [read $fin] close $fin | | | 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | test zipfs-2.8 {zipfs mkzip} -constraints zipfs -body { cd $tcl_library/encoding zipfs mkzip $zipfile . set fin [open $zipfile r] fconfigure $fin -translation binary set dat [read $fin] close $fin zipfs mountdata $dat def zipfs list -glob ${ziproot}def/cp850.* } -cleanup { cd $CWD } -result "${ziproot}def/cp850.enc" testConstraint zipfsencbuf [zipfs exists ${ziproot}def/cp850.enc] test zipfs-2.9 {zipfs info} -constraints {zipfs zipfsencbuf} -body { set r [zipfs info ${ziproot}def/cp850.enc] |
︙ | ︙ | |||
204 205 206 207 208 209 210 | set interp [interp create] } -body { interp eval $interp { zipfs ? } } -returnCodes error -cleanup { interp delete $interp | | | 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | set interp [interp create] } -body { interp eval $interp { zipfs ? } } -returnCodes error -cleanup { interp delete $interp } -result {unknown or ambiguous subcommand "?": must be canonical, exists, find, info, list, lmkimg, lmkzip, mkimg, mkkey, mkzip, mount, mountdata, root, or unmount} test zipfs-3.2 {zipfs in child interpreters} -constraints zipfs -setup { set interp [interp create] } -body { interp eval $interp { zipfs mkzip } } -returnCodes error -cleanup { |
︙ | ︙ | |||
344 345 346 347 348 349 350 | zipfs unmount ziptest removeFile $baseImage removeFile $midImage removeFile $targetImage removeFile $addFile } -result [list ${ziproot}/ziptest/test/add.tcl ${ziproot}/ziptest/test/ok.tcl] | | | | | | | | 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 | zipfs unmount ziptest removeFile $baseImage removeFile $midImage removeFile $targetImage removeFile $addFile } -result [list ${ziproot}/ziptest/test/add.tcl ${ziproot}/ziptest/test/ok.tcl] test zipfs-5.1 {zipfs mountdata: short data} -constraints zipfs -body { zipfs mountdata {} gorp } -returnCodes error -result {illegal file size} test zipfs-5.2 {zipfs mountdata: short data} -constraints zipfs -body { zipfs mountdata gorpGORPgorp gorp } -returnCodes error -result {illegal file size} test zipfs-5.3 {zipfs mountdata: short data} -constraints zipfs -body { set data PK\x03\x04..................................... append data PK\x01\x02..................................... append data PK\x05\x06..................................... zipfs mountdata $data gorp } -returnCodes error -result {archive directory truncated} test zipfs-6.1 {zipfs mkkey} -constraints zipfs -body { binary scan [zipfs mkkey gorp] cu* x return $x } -result {224 226 111 103 4 80 75 90 90} |
︙ | ︙ | |||
442 443 444 445 446 447 448 | cleanup } -result {1 1 {}} {*}$args if {![file exists $zippath]} { return } set data [readbin $zippath] | | | | | | | | | | | 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 | cleanup } -result {1 1 {}} {*}$args if {![file exists $zippath]} { return } set data [readbin $zippath] test zipfs-mountdata-$id $id -body { list [catch {zipfs mountdata $data $defMountPt} message] \ [string match $messagePattern $message] \ [mounttarget $defMountPt] } -cleanup { # In case mount succeeded when it should not cleanup } -result {1 1 {}} {*}$args } # Generates tests for file, file on root, memory buffer cases for an archive proc testmount {id zippath checkPath mountpoint args} { set zippath [zippath $zippath] test zipfs-mount-$id "zipfs mount $id" -body { set canon [mount $zippath $mountpoint] list [file exists [file join $canon $checkPath]] \ [zipfs mount $canon] [zipfs mount $mountpoint] } -cleanup { zipfs unmount $mountpoint } -result [list 1 $zippath $zippath] {*}$args # Mount memory buffer test zipfs-mountdata-$id "zipfs mountdata $id" -body { set canon [zipfs mountdata [readbin $zippath] $mountpoint] list [file exists [file join $canon $checkPath]] \ [zipfs mount $canon] [zipfs mount $mountpoint] } -cleanup { cleanup } -result [list 1 {Memory Buffer} {Memory Buffer}] {*}$args } testnumargs "zipfs mount" "" "?zipfile? ?mountpoint? ?password?" testnumargs "zipfs mountdata" "data mountpoint" "" # Not supported zip files testbadmount non-existent-file nosuchfile.zip "couldn't open*nosuchfile.zip*no such file or directory" testbadmount not-zipfile [file normalize [info script]] "archive directory end signature not found" testbadmount zip64-unsupported zip64.zip "wrong header signature" # Inconsistent metadata testbadmount bad-directory-offset incons-cdoffset.zip "archive directory truncated" testbadmount bad-directory-magic incons-central-magic-bad.zip "wrong header signature" testbadmount bad-local-magic incons-local-magic-bad.zip "Failed to find local header" testbadmount bad-file-count-high incons-file-count-high.zip "truncated directory" testbadmount bad-file-count-low incons-file-count-low.zip "short file count" test zipfs-mount-on-drive "Mount point include drive" -body { zipfs mount [zippath test.zip] C:/foo } -result {Invalid mount path "C:/foo"} -returnCodes error -constraints win test zipfs-mountdata-on-drive "Mount point include drive" -body { zipfs mountdata [readbin [zippath test.zip]] C:/foo } -result {Invalid mount path "C:/foo"} -returnCodes error -constraints win test zipfs-mount-on-unc "Mount point is unc" -body { zipfs mount [zippath test.zip] //unc/share/foo } -result {Invalid mount path "//unc/share/foo"} -returnCodes error test zipfs-mountdata-on-unc "Mount point include unc" -body { zipfs mountdata [readbin [zippath test.zip]] //unc/share/foo } -result {Invalid mount path "//unc/share/foo"} -returnCodes error # Good mounts testmount basic test.zip testdir/test2 $defMountPt testmount basic-on-default test.zip testdir/test2 "" testmount basic-on-root test.zip testdir/test2 [zipfs root] testmount basic-on-slash test.zip testdir/test2 / |
︙ | ︙ | |||
715 716 717 718 719 720 721 | } -result $resultpaths {*}$args # Mount memory buffer test zipfs-list-memory-$id "zipfs list memory $id" -body { lsort [zipfs list {*}$cmdargs] } -setup { foreach {zippath mountpoint} $mounts { | | | 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 | } -result $resultpaths {*}$args # Mount memory buffer test zipfs-list-memory-$id "zipfs list memory $id" -body { lsort [zipfs list {*}$cmdargs] } -setup { foreach {zippath mountpoint} $mounts { zipfs mountdata [readbin [zippath $zippath]] [file join [zipfs root] $mountpoint] } } -cleanup { cleanup } -result $resultpaths {*}$args } # Some tests have !zipfslib constraint because otherwise they dump the entire Tcl library which is mounted on root testzipfslist no-mounts "" {} {} -constraints !zipfslib |
︙ | ︙ | |||
781 782 783 784 785 786 787 | set setup { foreach {zippath mountpoint} $mounts { zipfs mount [zippath $zippath] [file join [zipfs root] $mountpoint] } } set memory_setup { foreach {zippath mountpoint} $mounts { | | | 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 | set setup { foreach {zippath mountpoint} $mounts { zipfs mount [zippath $zippath] [file join [zipfs root] $mountpoint] } } set memory_setup { foreach {zippath mountpoint} $mounts { zipfs mountdata [readbin [zippath $zippath]] [file join [zipfs root] $mountpoint] } } if {[dict exists $args -setup]} { append setup \n[dict get $args -setup] append memory_setup \n[dict get $args -setup] dict unset args -setup } |
︙ | ︙ | |||
976 977 978 979 980 981 982 | set fd [open [file join $defMountPt $filename] {*}$openopts] gets $fd } -result $result {*}$args set data [readbin $zippath] test zipfs-read-memory-$id "zipfs read in-memory $id" -setup { unset -nocomplain fd | | | 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 | set fd [open [file join $defMountPt $filename] {*}$openopts] gets $fd } -result $result {*}$args set data [readbin $zippath] test zipfs-read-memory-$id "zipfs read in-memory $id" -setup { unset -nocomplain fd zipfs mountdata $data $defMountPt } -cleanup { # In case open succeeded when it should not if {[info exists fd]} { close $fd } cleanup } -body { |
︙ | ︙ | |||
1049 1050 1051 1052 1053 1054 1055 | } cleanup } -body $body -result $result {*}$args set data [readbin $zippath] test zipfs-write-memory-$id "zipfs write in-memory $id" -setup { unset -nocomplain fd | | | 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 | } cleanup } -body $body -result $result {*}$args set data [readbin $zippath] test zipfs-write-memory-$id "zipfs write in-memory $id" -setup { unset -nocomplain fd zipfs mountdata $data $defMountPt } -cleanup { # In case open succeeded when it should not if {[info exists fd]} { close $fd } cleanup } -body $body -result $result {*}$args |
︙ | ︙ | |||
1207 1208 1209 1210 1211 1212 1213 | } cleanup } -body $body -result $expected {*}$args set data [readbin $zippath] test zipfs-rw-memory-$id "zipfs read/seek/write in-memory $id" -setup { unset -nocomplain fd | | | 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 | } cleanup } -body $body -result $expected {*}$args set data [readbin $zippath] test zipfs-rw-memory-$id "zipfs read/seek/write in-memory $id" -setup { unset -nocomplain fd zipfs mountdata $data $defMountPt } -cleanup { # In case open succeeded when it should not if {[info exists fd]} { close $fd } cleanup } -body $body -result $expected {*}$args |
︙ | ︙ | |||
1345 1346 1347 1348 1349 1350 1351 | cleanup } -body { set fd [open [file join $defMountPt $filename]] } -result $result -returnCodes error {*}$args # Mount memory buffer test zipfs-crc-memory-$id "zipfs crc memory $id" -setup { | | | 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 | cleanup } -body { set fd [open [file join $defMountPt $filename]] } -result $result -returnCodes error {*}$args # Mount memory buffer test zipfs-crc-memory-$id "zipfs crc memory $id" -setup { zipfs mountdata [readbin [zippath $zippath]] $defMountPt } -cleanup { cleanup } -body { set fd [open [file join $defMountPt $filename]] } -result $result -returnCodes error {*}$args } testcrc local incons-local-crc.zip a "invalid CRC" |
︙ | ︙ |