Summary
Various port procedures do not properly check their port argument for being closed
Metadata
- Id: 28f4dd4c871c8cd1d50b837285f7e7ecd8c5f259
- Trac id: 653
- Type: defect
- Reporter: sjamaan
- Owner: felix
- Cc:
- Status: closed
- Component: core libraries
- Estimated difficulty:
- Resolution: fixed
- Priority: major
- Milestone: 4.9.0
- Version: 4.7.x
- Changetime: 2012-09-24 21:47:48 UTC
- Created: 2011-07-17 16:12:55 UTC
- Keywords: ports, argument checking, safety
Attachments
- 28f4dd4c871c8cd1d50b837285f7e7ecd8c5f259/attachments/0001-Change-port-procedures-which-try-to-read-or-write-or.patch
Description
This is quite problematic with the OpenSSL egg, it causes Chicken to segfault:
$ csi CHICKEN (c)2008-2011 The Chicken Team (c)2000-2007 Felix L. Winkelmann Version 4.7.0 netbsd-unix-gnu-x86-64 [ 64bit manyargs dload ptables ] compiled 2011-05-25 on langly (NetBSD) #;1> (use openssl) ; loading /usr/pkg/lib/chicken/6/openssl.import.so ... ; loading /usr/pkg/lib/chicken/6/scheme.import.so ... ; loading /usr/pkg/lib/chicken/6/chicken.import.so ... ; loading /usr/pkg/lib/chicken/6/foreign.import.so ... ; loading /usr/pkg/lib/chicken/6/ports.import.so ... ; loading /usr/pkg/lib/chicken/6/srfi-18.import.so ... ; loading /usr/pkg/lib/chicken/6/tcp.import.so ... ; loading /usr/pkg/lib/chicken/6/openssl.so ... #;2> (define-values (in out) (ssl-connect "bugs.call-cc.org" 443)) #;3> (display "HTTP/1.0 GET /\r\nHost: bugs.call-cc.org\r\n\r\n" out) #;4> (close-output-port out) #;5> (close-input-port in) #;6> (read-string 10 in) zsh: segmentation fault csi
This is because read-string doesn't check if the port is closed. (in fact, if you try to read from the input port after leaving open the output port but closing the input port, it will return data anyway)
Attached is a testsuite for the procedures I was able to find which need to check, and a patch to make them behave correctly.
A few procedures even caused a *hang* when trying to read from closed ports!
Changes and comments
[2011-07-17 16:34:39 UTC] sjamaan attached 0001-Change-port-procedures-which-try-to-read-or-write-or.patch (description=#f)
[2011-07-17 23:30:51 UTC] felix changed status from new to closed
[2011-07-17 23:30:51 UTC] felix set resolution to fixed
[2011-07-17 23:30:51 UTC] felix wrote:
Patch applied - thanks.
[2012-09-24 21:47:48 UTC] felix changed milestone from 4.8.0 to 4.9.0
[2012-09-24 21:47:48 UTC] felix wrote:
Milestone 4.8.0 deleted