summaryrefslogtreecommitdiffstats
path: root/generic
diff options
context:
space:
mode:
authorjan.nijtmans <nijtmans@users.sourceforge.net>2016-08-31 08:55:32 (GMT)
committerjan.nijtmans <nijtmans@users.sourceforge.net>2016-08-31 08:55:32 (GMT)
commit3710a862b304ce13a5d771616b45eaa556f201bc (patch)
treeb89107a81aaee65f22938a9b9f99531a9877eefd /generic
parentb237ee23c355f68d92dccd811aa8bfd6f1ceed05 (diff)
parent34d8945d9d1dbbb3f599cabcad75ec0305f7615d (diff)
downloadtk-3710a862b304ce13a5d771616b45eaa556f201bc.zip
tk-3710a862b304ce13a5d771616b45eaa556f201bc.tar.gz
tk-3710a862b304ce13a5d771616b45eaa556f201bc.tar.bz2
Fix use of XMaxTransChars in stead of TCL_UTF_MAX in some places. This should prevent possible buffer overflow when TCL_UTF_MAX=6
Micro-optimizations in tkEntry and ttkEntry
Diffstat (limited to 'generic')
-rw-r--r--generic/tkEntry.c5
-rw-r--r--generic/tkSelect.c2
-rw-r--r--generic/ttk/ttkEntry.c5
3 files changed, 7 insertions, 5 deletions
diff --git a/generic/tkEntry.c b/generic/tkEntry.c
index 5681e47..a66cf18 100644
--- a/generic/tkEntry.c
+++ b/generic/tkEntry.c
@@ -1927,7 +1927,7 @@ EntryComputeGeometry(
if (entryPtr->showChar != NULL) {
Tcl_UniChar ch;
- char buf[TCL_UTF_MAX];
+ char buf[4];
int size;
/*
@@ -1945,7 +1945,8 @@ EntryComputeGeometry(
entryPtr->displayString = p;
for (i = entryPtr->numChars; --i >= 0; ) {
- p += Tcl_UniCharToUtf(ch, p);
+ memcpy(p, buf, size);
+ p += size;
}
*p = '\0';
}
diff --git a/generic/tkSelect.c b/generic/tkSelect.c
index ab9018a..74b3964 100644
--- a/generic/tkSelect.c
+++ b/generic/tkSelect.c
@@ -26,7 +26,7 @@ typedef struct {
int charOffset; /* The offset of the next char to retrieve. */
int byteOffset; /* The expected byte offset of the next
* chunk. */
- char buffer[TCL_UTF_MAX]; /* A buffer to hold part of a UTF character
+ char buffer[4]; /* A buffer to hold part of a UTF character
* that is split across chunks. */
char command[1]; /* Command to invoke. Actual space is
* allocated as large as necessary. This must
diff --git a/generic/ttk/ttkEntry.c b/generic/ttk/ttkEntry.c
index f395649..d80e1fd 100644
--- a/generic/ttk/ttkEntry.c
+++ b/generic/ttk/ttkEntry.c
@@ -283,14 +283,15 @@ static char *EntryDisplayString(const char *showChar, int numChars)
char *displayString, *p;
int size;
Tcl_UniChar ch;
- char buf[TCL_UTF_MAX];
+ char buf[4];
Tcl_UtfToUniChar(showChar, &ch);
size = Tcl_UniCharToUtf(ch, buf);
p = displayString = ckalloc(numChars * size + 1);
while (numChars--) {
- p += Tcl_UniCharToUtf(ch, p);
+ memcpy(p, buf, size);
+ p += size;
}
*p = '\0';