From ef34f28b38003a2c3cc8d75f5bd014bb48fe85dc Mon Sep 17 00:00:00 2001 From: Alexander von Gluck IV Date: Wed, 1 Feb 2012 08:13:20 -0600 Subject: [PATCH] opengl add-on: Fix potential memory leaks. CID 2777 * Free GL FrameBuffer which could of resulted in memory leaks * Add better malloc/calloc failure tracing. --- .../MesaSoftwareRenderer.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp index 6fb7d8faf9..6cc414e352 100644 --- a/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp +++ b/src/add-ons/opengl/mesa_software_renderer/MesaSoftwareRenderer.cpp @@ -285,22 +285,33 @@ MesaSoftwareRenderer::MesaSoftwareRenderer(BGLView* view, ulong options, // create core framebuffer fFrameBuffer = (struct msr_framebuffer*)calloc(1, sizeof(*fFrameBuffer)); + if (fFrameBuffer == NULL) { + ERROR("%s: Unable to calloc GL FrameBuffer!\n", __func__); + _mesa_destroy_visual(fVisual); + return; + } _mesa_initialize_window_framebuffer(&fFrameBuffer->base, fVisual); // Setup front render buffer fFrontRenderBuffer = _NewRenderBuffer(true); if (fFrontRenderBuffer == NULL) { + ERROR("%s: FrontRenderBuffer is requested but unallocated!\n", + __func__); _mesa_destroy_visual(fVisual); + free(fFrameBuffer); return; } _mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_FRONT_LEFT, &fFrontRenderBuffer->base); - // Setup back render buffer (if needed) + // Setup back render buffer (if requested) if (fVisual->doubleBufferMode) { fBackRenderBuffer = _NewRenderBuffer(false); if (fBackRenderBuffer == NULL) { + ERROR("%s: BackRenderBuffer is requested but unallocated!\n", + __func__); _mesa_destroy_visual(fVisual); + free(fFrameBuffer); return; } _mesa_add_renderbuffer(&fFrameBuffer->base, BUFFER_BACK_LEFT, @@ -346,6 +357,7 @@ MesaSoftwareRenderer::~MesaSoftwareRenderer() _mesa_destroy_context(fContext); free(fInfo); + free(fFrameBuffer); delete fBitmap; }