[Bf-blender-cvs] [e695b34] master: Fix memory leak loading single-layer OpenEXR
Campbell Barton
noreply at git.blender.org
Wed Jun 3 08:25:09 CEST 2015
Commit: e695b34505e7c428de2fb5cd695c5f8187d8b34d
Author: Campbell Barton
Date: Wed Jun 3 16:07:27 2015 +1000
Branches: master
https://developer.blender.org/rBe695b34505e7c428de2fb5cd695c5f8187d8b34d
Fix memory leak loading single-layer OpenEXR
Internal EXR API specifically avoids freeing non-file streams.
===================================================================
M source/blender/imbuf/intern/openexr/openexr_api.cpp
===================================================================
diff --git a/source/blender/imbuf/intern/openexr/openexr_api.cpp b/source/blender/imbuf/intern/openexr/openexr_api.cpp
index 05a4c87..fea2554 100644
--- a/source/blender/imbuf/intern/openexr/openexr_api.cpp
+++ b/source/blender/imbuf/intern/openexr/openexr_api.cpp
@@ -1856,6 +1856,7 @@ static bool imb_exr_is_multi(MultiPartInputFile& file)
struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags, char colorspace[IM_MAX_SPACE])
{
struct ImBuf *ibuf = NULL;
+ Mem_IStream *membuf = NULL;
MultiPartInputFile *file = NULL;
if (imb_is_a_openexr(mem) == 0) return(NULL);
@@ -1864,8 +1865,9 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags, char
try
{
- Mem_IStream *membuf = new Mem_IStream(mem, size);
bool is_multi;
+
+ membuf = new Mem_IStream(mem, size);
file = new MultiPartInputFile(*membuf);
Box2i dw = file->header(0).dataWindow();
@@ -1999,6 +2001,7 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags, char
}
/* file is no longer needed */
+ delete membuf;
delete file;
}
}
@@ -2013,6 +2016,7 @@ struct ImBuf *imb_load_openexr(unsigned char *mem, size_t size, int flags, char
std::cerr << exc.what() << std::endl;
if (ibuf) IMB_freeImBuf(ibuf);
delete file;
+ delete membuf;
return (0);
}
More information about the Bf-blender-cvs
mailing list