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-16 18:38:57 +0100 |
commit | f19d228c6a49222659c769099aaa4e755b80331d (patch) | |
tree | da29b0c0f2924f577448cda8e94340a505fedc70 | |
parent | b0c6be95b03d9f3dd2badcdcff359ae7bc9684f4 (diff) | |
download | ceph-f19d228c6a49222659c769099aaa4e755b80331d.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>
(cherry picked from commit d48cc789ea075ba2745754035640ada4131b2119)
-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; |