diff options
author | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-01-25 20:44:15 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@gmail.com> | 2014-01-25 20:44:15 +0400 |
commit | 70e844ea11f3ed0c215bd667f668303ad55fd785 (patch) | |
tree | 3deb6697afd328ce6b30ff2196244a6e7f3e4c44 | |
parent | b46dcafa7aeef69389ce5f45fb7982a37191534c (diff) |
Fix T38353: some EXR files from other applications not loading correctly.
* EXR layers with names like 'Z' without any pass name were not loaded at all
and would break the Combined pass as well.
* EXR pass names longer than 16 characters where writing past the end of the
array and getting invalid names.
-rw-r--r-- | source/blender/imbuf/intern/openexr/openexr_api.cpp | 9 | ||||
-rw-r--r-- | source/blender/render/extern/include/RE_pipeline.h | 2 |
2 files changed, 9 insertions, 2 deletions
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp index b25a224e16c..9fa69194ded 100644 --- a/source/blender/imbuf/intern/openexr/openexr_api.cpp +++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp @@ -891,7 +891,14 @@ static int imb_exr_split_channel_name(ExrChannel *echan, char *layname, char *pa if (name[1] == 0) { echan->chan_id = name[0]; layname[0] = '\0'; - strcpy(passname, "Combined"); + + if (ELEM4(name[0], 'R', 'G', 'B', 'A')) + strcpy(passname, "Combined"); + else if (name[0] == 'Z') + strcpy(passname, "Depth"); + else + strcpy(passname, name); + return 1; } diff --git a/source/blender/render/extern/include/RE_pipeline.h b/source/blender/render/extern/include/RE_pipeline.h index 4c15ddd6833..32c0a1d8535 100644 --- a/source/blender/render/extern/include/RE_pipeline.h +++ b/source/blender/render/extern/include/RE_pipeline.h @@ -68,7 +68,7 @@ typedef struct Render Render; typedef struct RenderPass { struct RenderPass *next, *prev; int passtype, channels; - char name[16]; /* amount defined in openexr_multi.h */ + char name[64]; /* amount defined in openexr_multi.h */ char chan_id[8]; /* amount defined in openexr_multi.h */ float *rect; int rectx, recty; |