diff options
author | Diego Borghetti <bdiego@gmail.com> | 2007-06-06 19:11:16 +0400 |
---|---|---|
committer | Diego Borghetti <bdiego@gmail.com> | 2007-06-06 19:11:16 +0400 |
commit | ee0c3245e79845d6987ee40fd919cec1b7a635b1 (patch) | |
tree | 8d2a8570abcc80807331db4fa3340a5622ed1282 /source/blender/blenkernel/intern | |
parent | 9a78468ab05beb7f3cf5711e51f0be2cfe76b0e4 (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.c | 11 |
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 ); |