diff options
author | Campbell Barton <ideasman42@gmail.com> | 2012-04-26 08:03:25 +0400 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2012-04-26 08:03:25 +0400 |
commit | af7eb3f2106612543e1e0a22e639fdfde3035dc8 (patch) | |
tree | 7c5b3943465c67b8177a46867bf7eef39b099453 /source/blender/blenloader/intern/writefile.c | |
parent | 0daa5b0c474067b54b2e26a3408df03c0042f9d8 (diff) |
fix for buffer overrun crash with saving scene name longer then 24 characters.
writing render info would try write= 64 length string into 24 length buffer.
updated py script to extract render info too.
Diffstat (limited to 'source/blender/blenloader/intern/writefile.c')
-rw-r--r-- | source/blender/blenloader/intern/writefile.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/source/blender/blenloader/intern/writefile.c b/source/blender/blenloader/intern/writefile.c index 0f2990a9157..61969c7878a 100644 --- a/source/blender/blenloader/intern/writefile.c +++ b/source/blender/blenloader/intern/writefile.c @@ -757,24 +757,30 @@ static void current_screen_compat(Main *mainvar, bScreen **screen) *screen= (window)? window->screen: NULL; } +typedef struct RenderInfo { + int sfra; + int efra; + char scene_name[MAX_ID_NAME - 2]; +} RenderInfo; + static void write_renderinfo(WriteData *wd, Main *mainvar) /* for renderdeamon */ { bScreen *curscreen; Scene *sce; - int data[8]; + RenderInfo data; /* XXX in future, handle multiple windows with multiple screnes? */ current_screen_compat(mainvar, &curscreen); for (sce= mainvar->scene.first; sce; sce= sce->id.next) { if (sce->id.lib==NULL && ( sce==curscreen->scene || (sce->r.scemode & R_BG_RENDER)) ) { - data[0]= sce->r.sfra; - data[1]= sce->r.efra; + data.sfra = sce->r.sfra; + data.efra = sce->r.efra; + memset(data.scene_name, 0, sizeof(data.scene_name)); - memset(data+2, 0, sizeof(int)*6); - BLI_strncpy((char *)(data+2), sce->id.name+2, sizeof(sce->id.name)-2); + BLI_strncpy(data.scene_name, sce->id.name + 2, sizeof(data.scene_name)); - writedata(wd, REND, 32, data); + writedata(wd, REND, sizeof(data), &data); } } } |