diff options
author | Bastien Montagne <montagne29@wanadoo.fr> | 2017-01-01 04:27:03 +0300 |
---|---|---|
committer | Bastien Montagne <montagne29@wanadoo.fr> | 2017-01-01 04:27:03 +0300 |
commit | 7924c84c44c70fefa64a872d6d767913fba636d2 (patch) | |
tree | 5b8095c03fb4e13e52326489eb6f022bcb472dda /source/blender/blenkernel/intern/library.c | |
parent | adadfaad880b2ad56fde72a38b13d42b512de81d (diff) |
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.
Diffstat (limited to 'source/blender/blenkernel/intern/library.c')
-rw-r--r-- | source/blender/blenkernel/intern/library.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c index 65f37d0a5b1..64535f229a9 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) && |