aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorace20022 <ace20022@ymail.com>2013-09-26 11:28:01 +0200
committerace20022 <ace20022@ymail.com>2013-09-26 11:33:20 +0200
commit3964f0d0f6e2f4b4f42d5e81ce07a6d89ed340f1 (patch)
treea90bf5de7ef6e1022217d8c4ec96d2cb2f24d191
parent75ad4ab37ab7474eec061385b62ae6de338add70 (diff)
[cximage] Fix common realloc mistake: 'm_pBuffer' nulled but not freed upon failure in xmemfile.
-rw-r--r--lib/cximage-6.0/CxImage/xmemfile.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/lib/cximage-6.0/CxImage/xmemfile.cpp b/lib/cximage-6.0/CxImage/xmemfile.cpp
index af8db945a3..5a72200238 100644
--- a/lib/cximage-6.0/CxImage/xmemfile.cpp
+++ b/lib/cximage-6.0/CxImage/xmemfile.cpp
@@ -186,9 +186,21 @@ bool CxMemFile::Alloc(DWORD dwNewLen)
// allocate new buffer
if (m_pBuffer == NULL) m_pBuffer = (BYTE*)malloc(dwNewBufferSize);
- else m_pBuffer = (BYTE*)realloc(m_pBuffer, dwNewBufferSize);
+ else
+ {
+ BYTE* new_buf = (BYTE*)realloc(m_pBuffer, dwNewBufferSize);
+ if (!new_buf)
+ {
+ free(m_pBuffer);
+ m_bFreeOnClose = false;
+ return false;
+ }
+ else
+ m_pBuffer = new_buf;
+ }
// I own this buffer now (caller knows nothing about it)
- m_bFreeOnClose = true;
+ if (m_pBuffer)
+ m_bFreeOnClose = true;
m_Edge = dwNewBufferSize;
}