Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiego Borghetti <bdiego@gmail.com>2007-06-06 19:11:16 +0400
committerDiego Borghetti <bdiego@gmail.com>2007-06-06 19:11:16 +0400
commitee0c3245e79845d6987ee40fd919cec1b7a635b1 (patch)
tree8d2a8570abcc80807331db4fa3340a5622ed1282 /source/blender/blenkernel/intern
parent9a78468ab05beb7f3cf5711e51f0be2cfe76b0e4 (diff)
Fix possible segfault in blender.
tname can be bigger of 21 character, in that case strncpy don't put the final '\0' to the name this.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r--source/blender/blenkernel/intern/library.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/source/blender/blenkernel/intern/library.c b/source/blender/blenkernel/intern/library.c
index 23cf864e181..0163cced795 100644
--- a/source/blender/blenkernel/intern/library.c
+++ b/source/blender/blenkernel/intern/library.c
@@ -915,12 +915,17 @@ int new_id(ListBase *lb, ID *id, const char *tname)
/* if no libdata given, look up based on ID */
if(lb==NULL) lb= wich_libbase(G.main, GS(id->name));
- if(tname==0) /* if no name given, use name of current ID */
+ if(tname==0) { /* if no name given, use name of current ID */
strncpy(name, id->name+2, 21);
- else /* else make a copy (tname args can be const) */
+ result= strlen(id->name+2);
+ }
+ else { /* else make a copy (tname args can be const) */
strncpy(name, tname, 21);
+ result= strlen(tname);
+ }
- if( strlen(name) > 21 ) name[21]= 0;
+ /* if result > 21, strncpy don't put the final '\0' to name. */
+ if( result > 21 ) name[21]= 0;
result = check_for_dupid( lb, id, name );
strcpy( id->name+2, name );