diff options
| author | sebres <sebres@users.sourceforge.net> | 2024-05-17 09:51:41 (GMT) |
|---|---|---|
| committer | sebres <sebres@users.sourceforge.net> | 2024-05-17 09:51:41 (GMT) |
| commit | 3d0973aa69124e07b27724807538e4bf504d299a (patch) | |
| tree | 8bd8f860251b7cb1fd7adabf00cc2313fd6a49cd /generic/tclIO.c | |
| parent | d882c39f4b96a7a2f39035b4dc27817d70c5fd29 (diff) | |
| download | tcl-3d0973aa69124e07b27724807538e4bf504d299a.zip tcl-3d0973aa69124e07b27724807538e4bf504d299a.tar.gz tcl-3d0973aa69124e07b27724807538e4bf504d299a.tar.bz2 | |
fixes yet another segfault (if write handler doesn't generate an error, but returns normally with length of written bytes)
Diffstat (limited to 'generic/tclIO.c')
| -rw-r--r-- | generic/tclIO.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c index 2df8696..c3844af 100644 --- a/generic/tclIO.c +++ b/generic/tclIO.c @@ -9964,19 +9964,20 @@ DoRead( } if (code || !bufPtr) { - /* - * Read error - */ - - UpdateInterest(chanPtr); - TclChannelRelease((Tcl_Channel)chanPtr); - return -1; + /* Read error (or channel dead/closed) */ + goto readErr; } assert(IsBufferFull(bufPtr)); } - assert(bufPtr != NULL); + if (!bufPtr) { + readErr: + + UpdateInterest(chanPtr); + TclChannelRelease((Tcl_Channel)chanPtr); + return -1; + } bytesRead = BytesLeft(bufPtr); bytesWritten = bytesToRead; |
