Tcl Source Code

View Ticket
Login
Ticket UUID: 9ee9f4d7be4615e04f62fe22885dadce13ca4d01
Title: zlib push/pop corrupts underlying channel
Type: Bug Version: various
Submitter: pooryorick Created on: 2020-06-16 15:10:37
Subsystem: 25. Channel System Assigned To: dkf
Priority: 5 Medium Severity: Important
Status: Open Last Modified: 2020-06-19 20:04:29
Resolution: None Closed By: nobody
    Closed on:
Description: (text/x-fossil-wiki)
In the following script, the $src gains two new characters at the end each
time a zlib transform is pushed and then popped:

<code><pre>
#! /usr/bin/env tclsh

set data hello
set src [file tempfile]
puts -nonewline $src $data
flush $src
chan configure $src -translation binary

set dst [file tempfile]
chan configure $dst -translation binary

for {set i 0} {$i < 10} {incr i} {
    # Determine size of src channel
    seek $src 0 end
    set size [chan tell $src]
    seek $src 0 start
    # Determine size of content in src channel
    set data [read $src]
    set size2 [string length $data]
    seek $src 0 start
    # Copy src over to dst, keep dst empty
    zlib push deflate $src -level 6
    chan truncate $dst 0
    chan copy $src $dst
    chan pop $src
    # Show sizes
    puts [list $size $size2]
}
close $src
close $dst

</pre></code>