summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDanny Al-Gaaf <danny.al-gaaf@bisect.de>2013-02-08 16:57:20 +0100
committerDanny Al-Gaaf <danny.al-gaaf@bisect.de>2013-02-10 10:05:06 +0100
commitd48cc789ea075ba2745754035640ada4131b2119 (patch)
treefad9200d02aad057014758c1841e8b2e3334a4f6
parentc92a0f552587a232f66620170660d6b2ab6fb3a5 (diff)
downloadceph-d48cc789ea075ba2745754035640ada4131b2119.tar.gz
rgw/rgw_xml.cc: fix realloc memory leak in error case
Fix error from cppcheck: [src/rgw/rgw_xml.cc:212]: (error) Common realloc mistake: 'buf' nulled but not freed upon failure Signed-off-by: Danny Al-Gaaf <danny.al-gaaf@bisect.de>
-rw-r--r--src/rgw/rgw_xml.cc11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/rgw/rgw_xml.cc b/src/rgw/rgw_xml.cc
index 4347b06115c..eee69d026ba 100644
--- a/src/rgw/rgw_xml.cc
+++ b/src/rgw/rgw_xml.cc
@@ -209,9 +209,16 @@ bool RGWXMLParser::init()
bool RGWXMLParser::parse(const char *_buf, int len, int done)
{
int pos = buf_len;
- buf = (char *)realloc(buf, buf_len + len);
- if (!buf)
+ char *tmp_buf;
+ tmp_buf = (char *)realloc(buf, buf_len + len);
+ if (tmp_buf == NULL){
+ free(buf);
+ buf = NULL;
return false;
+ } else {
+ buf = tmp_buf;
+ }
+
memcpy(&buf[buf_len], _buf, len);
buf_len += len;