summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYehuda Sadeh <yehuda@inktank.com>2012-11-19 17:10:11 -0800
committerYehuda Sadeh <yehuda@inktank.com>2012-11-21 13:12:04 -0800
commit6c1e2b663227cadff4255db3321976882df6b261 (patch)
tree26abd2e6069e481a0ffff352a1bbe830f0553403
parent17e4c0df44781f5ff1d74f3800722452b6a0fc58 (diff)
downloadceph-6c1e2b663227cadff4255db3321976882df6b261.tar.gz
rgw: fix xml parser leak
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com> (cherry picked from commit f86522cdfcd81b2d28c581ac8b8de6226bc8d1a4)
-rw-r--r--src/rgw/rgw_xml.cc7
1 files changed, 3 insertions, 4 deletions
diff --git a/src/rgw/rgw_xml.cc b/src/rgw/rgw_xml.cc
index 1d95abcb4b6..ae5b4bbfd97 100644
--- a/src/rgw/rgw_xml.cc
+++ b/src/rgw/rgw_xml.cc
@@ -133,11 +133,14 @@ static void xml_start(void *data, const char *el, const char **attr) {
RGWXMLParser::
RGWXMLParser() : buf(NULL), buf_len(0), cur_obj(NULL), success(true)
{
+ p = XML_ParserCreate(NULL);
}
RGWXMLParser::
~RGWXMLParser()
{
+ XML_ParserFree(p);
+
free(buf);
vector<XMLObj *>::iterator iter;
for (iter = objs.begin(); iter != objs.end(); ++iter) {
@@ -194,7 +197,6 @@ void RGWXMLParser::handle_data(const char *s, int len)
bool RGWXMLParser::init()
{
- p = XML_ParserCreate(NULL);
if (!p) {
return false;
}
@@ -219,8 +221,5 @@ bool RGWXMLParser::parse(const char *_buf, int len, int done)
success = false;
}
- if (done || !success)
- XML_ParserFree(p);
-
return success;
}