[Bf-blender-cvs] [7924c84] master: Fix T50305: When adding new ID with same name as existing, Blender could generate invalid utf-8 ID name.

Bastien Montagne noreply at git.blender.org
Sun Jan 1 02:29:26 CET 2017


Commit: 7924c84c44c70fefa64a872d6d767913fba636d2
Author: Bastien Montagne
Date:   Sun Jan 1 02:27:03 2017 +0100
Branches: master
https://developer.blender.org/rB7924c84c44c70fefa64a872d6d767913fba636d2

Fix T50305: When adding new ID with same name as existing, Blender could generate invalid utf-8 ID name.

`check_for_dupid()` would roughly truncate existing name, without doing any utf-8 validation.

===================================================================

M	source/blender/blenkernel/intern/library.c

===================================================================

diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 65f37d0..64535f2 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -1431,14 +1431,18 @@ static bool check_for_dupid(ListBase *lb, ID *id, char *name)
 
 		/* if new name will be too long, truncate it */
 		if (nr > 999 && left_len > (MAX_ID_NAME - 8)) {  /* assumption: won't go beyond 9999 */
-			left[MAX_ID_NAME - 8] = 0;
+			left[MAX_ID_NAME - 8] = '\0';
 			left_len = MAX_ID_NAME - 8;
 		}
 		else if (left_len > (MAX_ID_NAME - 7)) {
-			left[MAX_ID_NAME - 7] = 0;
+			left[MAX_ID_NAME - 7] = '\0';
 			left_len = MAX_ID_NAME - 7;
 		}
 
+		/* Code above may have generated invalid utf-8 string, due to raw truncation.
+		 * Ensure we get a valid one now! */
+		left_len -= BLI_utf8_invalid_strip(left, left_len);
+
 		for (idtest = lb->first; idtest; idtest = idtest->next) {
 			int nrtest;
 			if ( (id != idtest) &&




More information about the Bf-blender-cvs mailing list