[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