Ticket UUID: | 2046486 | |||
Title: | bogus CRC mismatches in ::http::Gunzip on 64bit architecture | |||
Type: | Bug | Version: | obsolete: 8.5.3 | |
Submitter: | matzek | Created on: | 2008-08-11 14:03:49 | |
Subsystem: | 29. http Package | Assigned To: | patthoyts | |
Priority: | 8 | Severity: | ||
Status: | Closed | Last Modified: | 2008-08-12 04:31:56 | |
Resolution: | Fixed | Closed By: | patthoyts | |
Closed on: | 2008-08-11 21:31:56 | |||
Description: |
Hi *, [binary scan i] delivers signed integers, while [zlib crc32] delivers unsigned integers. The appended patch will correct the crc from binary scan. Simple test case: create gzipped data that delivers such a CRC, i.e. $ dd if=/dev/zero bs=1 count=128 | gzip -1 > 128zeros.gz then run this small script: ---- package r http 2.7 set fh [open 128zeros.gz r] fconfigure $fh -encoding binary -translation binary set data [read $fh] close $fh ::http::Gunzip $data ---- Result without patch: invalid data: checksum mismatch -1029113187 != 3265854109 while executing "::http::Gunzip $data" kind regards -- Matthias Kraft | |||
User Comments: |
patthoyts added on 2008-08-12 04:31:56:
Logged In: YES user_id=202636 Originator: NO OK. making use of the binary scan like this isn't necessary so changed to apply a 32bit mask in the comparison instead which remains 8.4 compliant. dgp added on 2008-08-11 22:56:27: Logged In: YES user_id=80530 Originator: NO For the sake of the ActiveTcl 8.4 distributions that support Tcl Modules, an http 2.7.1 that fixes this bug and doesn't rely on Tcl 8.5 would be a good idea. Without that, AT 8.4 will continue to get buggy http 2.7 by default. dgp added on 2008-08-11 22:52:32: Logged In: YES user_id=80530 Originator: NO This has been fixed in http 2.7.1. Is the bug also present in http 2.5.5 ? If so, is there any reasonable way to fix it to make an http 2.5.6 that can still be used in a Tcl 8.4 interp? patthoyts added on 2008-08-11 21:40:47: Logged In: YES user_id=202636 Originator: NO The problem is treating the crc and size fields in the gzip header as signed when they should be unsigned. Fixed simply by using binary scan $header iuiu crc size to use them as unsigned values. Committed to HEAD and 8.5 branch (not relevant to 8.4) matzek added on 2008-08-11 21:03:49: File Added - 288104: http.tcl.patch-1.67 |
Attachments:
- http.tcl.patch-1.67 [download] added by matzek on 2008-08-11 21:03:49. [details]