diff options
author | Danny Al-Gaaf <danny.al-gaaf@bisect.de> | 2013-02-08 16:57:20 +0100 |
---|---|---|
committer | Danny Al-Gaaf <danny.al-gaaf@bisect.de> | 2013-02-10 10:05:06 +0100 |
commit | d48cc789ea075ba2745754035640ada4131b2119 (patch) | |
tree | fad9200d02aad057014758c1841e8b2e3334a4f6 | |
parent | c92a0f552587a232f66620170660d6b2ab6fb3a5 (diff) | |
download | ceph-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.cc | 11 |
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; |