summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2024-05-17 09:51:41 (GMT)
committersebres <sebres@users.sourceforge.net>2024-05-17 09:51:41 (GMT)
commit3d0973aa69124e07b27724807538e4bf504d299a (patch)
tree8bd8f860251b7cb1fd7adabf00cc2313fd6a49cd /generic/tclIO.c
parentd882c39f4b96a7a2f39035b4dc27817d70c5fd29 (diff)
downloadtcl-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.c17
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;