Fix memory leaks in the config parser.

This commit is contained in:
Gunnar Beutner 2013-04-04 13:51:36 +02:00
parent 8ac0a80101
commit ca4157ea24
4 changed files with 286 additions and 280 deletions

View File

@ -104,6 +104,8 @@ void AttributeHolder::Bind(AttributeBase *boundAttribute)
{
ASSERT(m_OwnsAttribute);
boundAttribute->Set(m_Attribute->Get());
if (m_OwnsAttribute)
delete m_Attribute;
m_Attribute = boundAttribute;
m_OwnsAttribute = false;
}

File diff suppressed because it is too large Load Diff

View File

@ -69,6 +69,7 @@
#include <stack>
#include <boost/smart_ptr/make_shared.hpp>
#include <boost/exception/diagnostic_information.hpp>
#include <boost/foreach.hpp>
using namespace icinga;
@ -78,7 +79,7 @@ using namespace icinga;
/* Line 2068 of yacc.c */
#line 82 "config_parser.h"
#line 83 "config_parser.h"
/* Tokens. */
#ifndef YYTOKENTYPE
@ -154,18 +155,22 @@ typedef union YYSTYPE
{
/* Line 2068 of yacc.c */
#line 52 "config_parser.yy"
#line 53 "config_parser.yy"
char *text;
double num;
icinga::Value *variant;
icinga::ExpressionOperator op;
icinga::TypeSpecifier type;
std::vector<String> *slist;
Expression *expr;
ExpressionList *exprl;
Array *array;
/* Line 2068 of yacc.c */
#line 169 "config_parser.h"
#line 174 "config_parser.h"
} YYSTYPE;
# define YYSTYPE_IS_TRIVIAL 1
# define yystype YYSTYPE /* obsolescent; will be withdrawn */

View File

@ -345,6 +345,7 @@ object_inherits_list:
{
$$ = new std::vector<String>();
$$->push_back($1);
free($1);
}
| object_inherits_list ',' T_STRING
{
@ -354,6 +355,7 @@ object_inherits_list:
$$ = new std::vector<String>();
$$->push_back($3);
free($3);
}
;
@ -390,6 +392,7 @@ expressions_inner: /* empty */
{
$$ = new ExpressionList();
$$->AddExpression(*$1);
delete $1;
}
| expressions_inner ',' expression
{
@ -399,6 +402,7 @@ expressions_inner: /* empty */
$$ = new ExpressionList();
$$->AddExpression(*$3);
delete $3;
}
;
@ -455,6 +459,7 @@ array_items_inner: /* empty */
{
$$ = new Array();
$$->Add(*$1);
delete $1;
}
| array_items_inner ',' value
{
@ -464,6 +469,7 @@ array_items_inner: /* empty */
$$ = new Array();
$$->Add(*$3);
delete $3;
}
;