From 4eec31fbb436bb39ad1be0ac1d4f6b5804bca4e1 Mon Sep 17 00:00:00 2001 From: fvogel Date: Wed, 13 Jun 2018 20:27:21 +0000 Subject: [PATCH 232/693] Fix [de01e24aa1]: Text replace command involving selection crashes --- generic/tkText.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/generic/tkText.c b/generic/tkText.c index 308855f13..78260e08c 100644 --- a/generic/tkText.c +++ b/generic/tkText.c @@ -1465,7 +1465,7 @@ TextWidgetObjCmd( * unnecessarily. */ - int deleteInsertOffset, insertLength, j; + int deleteInsertOffset, insertLength, j, indexFromLine, indexFromByteOffset; insertLength = 0; for (j = 4; j < objc; j += 2) { @@ -1483,6 +1483,9 @@ TextWidgetObjCmd( deleteInsertOffset = insertLength; } + indexFromLine = TkBTreeLinesTo(textPtr, indexFromPtr->linePtr); + indexFromByteOffset = indexFromPtr->byteIndex; + result = TextReplaceCmd(textPtr, interp, indexFromPtr, indexToPtr, objc, objv, 0); @@ -1491,8 +1494,11 @@ TextWidgetObjCmd( * Move the insertion position to the correct place. */ - indexFromPtr = TkTextGetIndexFromObj(interp, textPtr, objv[2]); - TkTextIndexForwChars(NULL, indexFromPtr, + TkTextIndex indexTmp; + + TkTextMakeByteIndex(textPtr->sharedTextPtr->tree, textPtr, indexFromLine, + indexFromByteOffset, &indexTmp); + TkTextIndexForwChars(NULL, &indexTmp, deleteInsertOffset, &index, COUNT_INDICES); TkBTreeUnlinkSegment(textPtr->insertMarkPtr, textPtr->insertMarkPtr->body.mark.linePtr); -- 2.19.1