diff options
author | Campbell Barton <ideasman42@gmail.com> | 2010-08-12 02:36:43 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2010-08-12 02:36:43 +0400 |
commit | aae5c9b58db6edc7672527617da212fe1e68dfdd (patch) | |
tree | 1543a021fc967debb6e07f69e7874812e1c56a8f /source/blender/blenlib/intern/storage.c | |
parent | 350e6d22fd55fc26aeba9354d723f4bcef3d2884 (diff) |
- possibly bugfix /w uninitialized vars [#23270] Long directory name segmentation fault in File brower.
- in exceptional cases vertcos_to_key() could return with KeyBlock pointing to freed memory.
- invalid use of realloc() in BLI_builddir()
Diffstat (limited to 'source/blender/blenlib/intern/storage.c')
-rw-r--r-- | source/blender/blenlib/intern/storage.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/source/blender/blenlib/intern/storage.c b/source/blender/blenlib/intern/storage.c index edb6aecabb1..80310b1ef8a 100644 --- a/source/blender/blenlib/intern/storage.c +++ b/source/blender/blenlib/intern/storage.c @@ -237,8 +237,19 @@ void BLI_builddir(char *dirname, char *relname) if (newnum){ - if (files) files=(struct direntry *)realloc(files,(totnum+newnum) * sizeof(struct direntry)); - else files=(struct direntry *)malloc(newnum * sizeof(struct direntry)); + if(files) { + void *tmp= realloc(files, (totnum+newnum) * sizeof(struct direntry)); + if(tmp) { + files= (struct direntry *)tmp; + } + else { /* realloc fail */ + free(files); + files= NULL; + } + } + + if(files==NULL) + files=(struct direntry *)malloc(newnum * sizeof(struct direntry)); if (files){ dlink = (struct dirlink *) dirbase->first; |