]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix xml parser leak
authorYehuda Sadeh <yehuda@inktank.com>
Tue, 20 Nov 2012 01:10:11 +0000 (17:10 -0800)
committerYehuda Sadeh <yehuda@inktank.com>
Wed, 21 Nov 2012 21:12:04 +0000 (13:12 -0800)
Signed-off-by: Yehuda Sadeh <yehuda@inktank.com>
(cherry picked from commit f86522cdfcd81b2d28c581ac8b8de6226bc8d1a4)

src/rgw/rgw_xml.cc

index 1d95abcb4b6d247e092438fe19597de41826d06f..ae5b4bbfd977f7b3c66d96c4d160104c438156c1 100644 (file)
@@ -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;
 }