[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33343] trunk/blender/source/blender/ blenkernel/intern/font.c: Fix #24914: 3D text glitch and crash
Sergey Sharybin
g.ulairi at gmail.com
Fri Nov 26 19:13:27 CET 2010
Revision: 33343
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33343
Author: nazgul
Date: 2010-11-26 19:13:27 +0100 (Fri, 26 Nov 2010)
Log Message:
-----------
Fix #24914: 3D text glitch and crash
Crash was caused by invalid utf8 sequence pasteing from the clipboard.
Prevent memory corruption by giving utf8slen() the same rules of bytes checking
as utf8towchar() does.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/font.c
Modified: trunk/blender/source/blender/blenkernel/intern/font.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/font.c 2010-11-26 17:25:06 UTC (rev 33342)
+++ trunk/blender/source/blender/blenkernel/intern/font.c 2010-11-26 18:13:27 UTC (rev 33343)
@@ -124,31 +124,27 @@
}
static int
-utf8slen(char *src)
+utf8slen(const char *strc)
{
- int size = 0, index = 0;
- unsigned char c;
-
- c = src[index++];
- while(c)
- {
- if((c & 0x80) == 0)
- {
- index += 0;
+ int len=0;
+
+ while(*strc) {
+ if ((*strc & 0xe0) == 0xc0) {
+ if((strc[1] & 0x80) && (strc[1] & 0x40) == 0x00)
+ strc++;
+ } else if ((*strc & 0xf0) == 0xe0) {
+ if((strc[1] & strc[2] & 0x80) && ((strc[1] | strc[2]) & 0x40) == 0x00)
+ strc += 2;
+ } else if ((*strc & 0xf8) == 0xf0) {
+ if((strc[1] & strc[2] & strc[3] & 0x80) && ((strc[1] | strc[2] | strc[3]) & 0x40) == 0x00)
+ strc += 3;
}
- else if((c & 0xe0) == 0xe0)
- {
- index += 2;
- }
- else
- {
- index += 1;
- }
- size += 1;
- c = src[index++];
+
+ strc++;
+ len++;
}
-
- return size;
+
+ return len;
}
More information about the Bf-blender-cvs
mailing list