[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