From 3dbe055401e7ccaaff2ea6b362bc4bcaac6ca98a Mon Sep 17 00:00:00 2001 From: George Hazan Date: Sun, 12 Jun 2016 21:38:05 +0000 Subject: more foolproof variant of NetlibBinBuffer git-svn-id: http://svn.miranda-ng.org/main/trunk@16960 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- src/mir_app/src/netlib.h | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/mir_app/src/netlib.h b/src/mir_app/src/netlib.h index bacad422df..f653de6f8f 100644 --- a/src/mir_app/src/netlib.h +++ b/src/mir_app/src/netlib.h @@ -87,6 +87,9 @@ public: void append(void *pBuf, int bufLen) { + if (pBuf == NULL || bufLen == 0) + return; + m_buf = (char*)mir_realloc(m_buf, bufLen + m_len); if (m_buf) { memcpy(m_buf + m_len, pBuf, bufLen); @@ -97,6 +100,9 @@ public: void appendBefore(void *pBuf, int bufLen) { + if (pBuf == NULL || bufLen == 0) + return; + m_buf = (char*)mir_realloc(m_buf, bufLen + m_len); if (m_buf) { memmove(m_buf + bufLen, m_buf, m_len); @@ -108,8 +114,17 @@ public: void remove(int sz) { - memmove(m_buf, m_buf + sz, m_len - sz); - m_len -= sz; + if (sz > m_len) + m_len = sz; + + if (m_len == sz) { + m_len = 0; + mir_free(m_buf); m_buf = NULL; + } + else { + memmove(m_buf, m_buf + sz, m_len - sz); + m_len -= sz; + } } }; -- cgit v1.2.3