summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjan.nijtmans <jan.nijtmans@noemail.net>2011-03-28 09:20:54 (GMT)
committerjan.nijtmans <jan.nijtmans@noemail.net>2011-03-28 09:20:54 (GMT)
commite0127162626969399ab315190a8cfcba049d0e8a (patch)
tree24fac5f15845fd43092b4742e401d03fca969508
parent29d7d0ac52b644b81a665da2d0bd355c3fbe884c (diff)
parent0079bb6c357a6fa834ba857e27bf1d5be9a98dd4 (diff)
downloadtk-e0127162626969399ab315190a8cfcba049d0e8a.zip
tk-e0127162626969399ab315190a8cfcba049d0e8a.tar.gz
tk-e0127162626969399ab315190a8cfcba049d0e8a.tar.bz2
[Bug 3129527]: Fix buffer overflow w/ GCC 4.5 and -D_FORTIFY_SOURCE=2. One more place where this problem could appear.
FossilOrigin-Name: bc537f82b3008e732659dbcde9446958f1edf20a
-rw-r--r--ChangeLog5
-rw-r--r--generic/tkTextBTree.c12
2 files changed, 12 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 9d3bfe1..2ba4876 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2011-03-28 Jan Nijtmans <nijtmans@users.sf.net>
+
+ * generic/tkTextBTree.c: [Bug 3129527]: Fix buffer overflow w/ GCC 4.5 and
+ -D_FORTIFY_SOURCE=2. One more place where this problem could appear.
+
2011-03-24 Jan Nijtmans <nijtmans@users.sf.net>
* win/tkWinMenu.c: [Bug #3239768] tk8.4.19 (and later) WIN32
diff --git a/generic/tkTextBTree.c b/generic/tkTextBTree.c
index b714546..e464cc6 100644
--- a/generic/tkTextBTree.c
+++ b/generic/tkTextBTree.c
@@ -1076,7 +1076,7 @@ TkBTreeInsertChars(
curPtr->nextPtr = segPtr;
}
segPtr->size = chunkSize;
- strncpy(segPtr->body.chars, string, (size_t) chunkSize);
+ memcpy(segPtr->body.chars, string, (size_t) chunkSize);
segPtr->body.chars[chunkSize] = 0;
if (eol[-1] != '\n') {
@@ -4550,12 +4550,13 @@ CharSplitProc(
newPtr1->typePtr = &tkTextCharType;
newPtr1->nextPtr = newPtr2;
newPtr1->size = index;
- strncpy(newPtr1->body.chars, segPtr->body.chars, (size_t) index);
+ memcpy(newPtr1->body.chars, segPtr->body.chars, (size_t) index);
newPtr1->body.chars[index] = 0;
newPtr2->typePtr = &tkTextCharType;
newPtr2->nextPtr = segPtr->nextPtr;
newPtr2->size = segPtr->size - index;
- strcpy(newPtr2->body.chars, segPtr->body.chars + index);
+ memcpy(newPtr2->body.chars, segPtr->body.chars + index, newPtr2->size);
+ newPtr2->body.chars[newPtr2->size] = 0;
ckfree((char *) segPtr);
return newPtr1;
}
@@ -4596,8 +4597,9 @@ CharCleanupProc(
newPtr->typePtr = &tkTextCharType;
newPtr->nextPtr = segPtr2->nextPtr;
newPtr->size = segPtr->size + segPtr2->size;
- strcpy(newPtr->body.chars, segPtr->body.chars);
- strcpy(newPtr->body.chars + segPtr->size, segPtr2->body.chars);
+ memcpy(newPtr->body.chars, segPtr->body.chars, segPtr->size);
+ memcpy(newPtr->body.chars + segPtr->size, segPtr2->body.chars, segPtr2->size);
+ newPtr->body.chars[newPtr->size] = 0;
ckfree((char *) segPtr);
ckfree((char *) segPtr2);
return newPtr;