win32.c
branch0.5
changeset 5470 9fce095970bb
parent 5466 85b7662d0342
child 5472 16f71955fc3b
--- a/win32.c	Mon Mar 19 21:04:06 2007 +0000
+++ b/win32.c	Mon Mar 19 21:42:05 2007 +0000
@@ -995,16 +995,18 @@
 	width = length = 0;
 
 	for (ptr = utf8_buf; (c = Utf8Consume(&ptr)) != '\0';) {
+		size_t len;
 		byte charwidth;
-
 		if (!IsPrintable(c)) break;
-		if (tb->length + length >= tb->maxlength - 1) break;
+
+		len = Utf8CharLen(c);
+		if (tb->length + length >= tb->maxlength - (uint16)len) break;
+
 		charwidth = GetCharacterWidth(FS_NORMAL, c);
-
 		if (tb->maxwidth != 0 && width + tb->width + charwidth > tb->maxwidth) break;
 
 		width += charwidth;
-		length += Utf8CharLen(c);
+		length += len;
 	}
 
 	if (length == 0) return false;
@@ -1016,6 +1018,7 @@
 
 	tb->length += length;
 	tb->caretpos += length;
+	assert(tb->length < tb->maxlength);
 	tb->buf[tb->length] = '\0'; // terminating zero
 
 	return true;