summaryrefslogtreecommitdiffstats
path: root/generic/tclIO.c
diff options
context:
space:
mode:
authorsebres <sebres@users.sourceforge.net>2024-01-29 14:10:54 (GMT)
committersebres <sebres@users.sourceforge.net>2024-01-29 14:10:54 (GMT)
commitb0b50752804a4ae7921d7c6aacc089c3c756cf65 (patch)
tree6e999eec9be540c66ca7dd10e63a0b364078121f /generic/tclIO.c
parent5da9a1bb8e6c51510927de4512d3bc0348f14ec2 (diff)
parente854c0b7ad76b97772afc934c45e763ecf17ff5c (diff)
downloadtcl-b0b50752804a4ae7921d7c6aacc089c3c756cf65.zip
tcl-b0b50752804a4ae7921d7c6aacc089c3c756cf65.tar.gz
tcl-b0b50752804a4ae7921d7c6aacc089c3c756cf65.tar.bz2
closes [db4f2843cd]: fixes segfault by BO in ReadChars (and Tcl_ReadChars with append)
Diffstat (limited to 'generic/tclIO.c')
-rw-r--r--generic/tclIO.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/generic/tclIO.c b/generic/tclIO.c
index 0f79f1e..b8a79c2 100644
--- a/generic/tclIO.c
+++ b/generic/tclIO.c
@@ -6111,8 +6111,9 @@ ReadChars(
int factor = *factorPtr;
int dstLimit = TCL_UTF_MAX - 1 + toRead * factor / UTF_EXPANSION_FACTOR;
+ if (dstLimit <= 0) dstLimit = INT_MAX; /* avoid overflow */
(void) TclGetStringFromObj(objPtr, &numBytes);
- Tcl_AppendToObj(objPtr, NULL, dstLimit);
+ TclAppendUtfToUtf(objPtr, NULL, dstLimit);
if (toRead == srcLen) {
unsigned int size;