Opened 10 years ago

Closed 10 years ago

Last modified 9 years ago

#653 closed defect (fixed)

Various port procedures do not properly check their port argument for being closed

Reported by: sjamaan Owned by: felix winkelmann
Priority: major Milestone: 4.9.0
Component: core libraries Version: 4.7.x
Keywords: ports, argument checking, safety Cc:
Estimated difficulty:

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!

Attachments (1)

0001-Change-port-procedures-which-try-to-read-or-write-or.patch (9.9 KB) - added by sjamaan 10 years ago.

Download all attachments as: .zip

Change History (3)

comment:1 Changed 10 years ago by felix winkelmann

Resolution: fixed
Status: newclosed

Patch applied - thanks.

comment:2 Changed 9 years ago by felix winkelmann

Milestone: 4.8.04.9.0

Milestone 4.8.0 deleted

Note: See TracTickets for help on using tickets.