Ticket UUID: | 772288 | |||
Title: | Crash when std channels not open | |||
Type: | Bug | Version: | obsolete: 8.4.3 | |
Submitter: | dkf | Created on: | 2003-07-16 13:18:15 | |
Subsystem: | 25. Channel System | Assigned To: | hobbs | |
Priority: | 8 | Severity: | ||
Status: | Closed | Last Modified: | 2004-02-18 06:54:39 | |
Resolution: | Fixed | Closed By: | hobbs | |
Closed on: | 2004-02-17 23:54:39 | |||
Description: |
The following script crashes both the HEAD and the 8.4 branch: open /dev/null when run like this (from BASH, but there are other equivalent situations): tclsh bug.tcl <&- The effect of the invokation is to make tclsh run without stdin opened (the same also happens with stdout and stderr.) This is caused by leaving the initialisation of the channel table until the call to Tcl_RegisterChannel() as part of the closing stages of the [open] implementation, which ensures that fd0 (or 1 or 2) is put in the table twice, once for stdin/out/err and once for the newly created channel for [open], with the second time being the crash. The attached patch fixes this, but causes test encoding-24.3 to fail, and will break any script that depends on setting [encoding system] early so as to alter the encodings of the std channels. This problem was discovered by rmax | |||
User Comments: |
hobbs added on 2004-02-18 06:54:39:
Logged In: YES user_id=72656 test unixInit-7.1 {closed standard channel} -body { set tclsh [interpreter] makeFile {puts [open /dev/null]} crash.tcl makeFile [subst -nocommands { close stdin exec $tclsh crash.tcl }] crashtest.tcl exec $tclsh crashtest.tcl } -returnCodes 0 in 8.4.6 and 8.5a1. hobbs added on 2004-02-07 02:34:00: Logged In: YES user_id=72656 we should have a test case for this. hobbs added on 2003-11-07 06:22:45: Logged In: YES user_id=72656 The alternate patch ignores Windows ... but is that 100% valid? I recently had to solve this by checking for the standard channels being NULL on Windows. I can't repro this with a variation of bug.tcl though. rmax added on 2003-10-02 20:15:16: File Added - 63206: open-std-channels.patch rmax added on 2003-10-02 20:15:13: Logged In: YES user_id=124643 How about this patch, at least as a workaround to prevent the crash until a better solution is found? Unlike Donal's proposal no tests fail with this patch applied. There might be better places for adding these lines, but TclpInitPlatform was the most reasonable place I have found. rmax added on 2003-10-02 16:38:28: Logged In: YES user_id=124643 Any news here, Jeff? Today another colleague got hit by this bug, because stdin is closed on processes started from fvwm2 buttons or menus. hobbs added on 2003-07-19 03:19:03: Logged In: YES user_id=72656 I want a much better understanding of the implications of this bug before placing it into 8.4.x dkf added on 2003-07-16 20:18:16: File Added - 55966: channelbug.patch |