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:

In the following script, the $src gains two new characters at the end each time a zlib transform is pushed and then popped:

#! /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