From 3d175ef1dece4e4ce420d051095b2bc73cdb26ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Pecka?= <peckato1@fit.cvut.cz>
Date: Tue, 6 May 2014 18:57:09 +0200
Subject: [PATCH] aconvert.regexp: fix leaks

---
 aconvert.regexp/src/RegExpParser.cpp    |  9 ++++++---
 aconvert.regexp/src/aconvert.regexp.cpp | 19 ++++++++++---------
 2 files changed, 16 insertions(+), 12 deletions(-)

diff --git a/aconvert.regexp/src/RegExpParser.cpp b/aconvert.regexp/src/RegExpParser.cpp
index cf070c07a5..faf7fc8a36 100644
--- a/aconvert.regexp/src/RegExpParser.cpp
+++ b/aconvert.regexp/src/RegExpParser.cpp
@@ -8,7 +8,10 @@ regexp::RegExp* RegExpParser::parse() {
   regexp::RegExpElement* element = this->Alternation();
   RegExpLexer::Token token = m_Lexer.token();
   if(token.type != RegExpLexer::TEOF) throw ParseError();
-  return new regexp::RegExp(element);
+
+  regexp::RegExp * ret = new regexp::RegExp( );
+  ret->setRegExp( element );
+  return ret;
 }
 
 regexp::RegExpElement* RegExpParser::Alternation() {
@@ -49,7 +52,7 @@ regexp::RegExpElement* RegExpParser::Concatenation() {
 regexp::RegExpElement* RegExpParser::ConcatenationCont(regexp::RegExpElement* left) {
   RegExpLexer::Token token = m_Lexer.token();
   if(token.type == RegExpLexer::SYMBOL || token.type == RegExpLexer::LPAR || token.type == RegExpLexer::EPS || token.type == RegExpLexer::EMPTY) {
-    
+
     regexp::Concatenation* res = this->ConcatenationContCont(this->Factor());
     res->getElements().push_front(left);
     return res;
@@ -61,7 +64,7 @@ regexp::RegExpElement* RegExpParser::ConcatenationCont(regexp::RegExpElement* le
 regexp::Concatenation* RegExpParser::ConcatenationContCont(regexp::RegExpElement* left) {
   RegExpLexer::Token token = m_Lexer.token();
   if(token.type == RegExpLexer::SYMBOL || token.type == RegExpLexer::LPAR || token.type == RegExpLexer::EPS || token.type == RegExpLexer::EMPTY) {
-    
+
     regexp::Concatenation* res = this->ConcatenationContCont(this->Factor());
     res->getElements().push_front(left);
     return res;
diff --git a/aconvert.regexp/src/aconvert.regexp.cpp b/aconvert.regexp/src/aconvert.regexp.cpp
index 417a1ff111..aa963b7ec3 100644
--- a/aconvert.regexp/src/aconvert.regexp.cpp
+++ b/aconvert.regexp/src/aconvert.regexp.cpp
@@ -21,11 +21,12 @@
 int fromRegexp(std::istream& in, std::ostream& out) {
   RegExpLexer lexer(in);
   RegExpParser parser(lexer);
-  
+
   regexp::RegExp* result = parser.parse();
-  
+
   out << *result;
-  
+  delete result;
+
   return 0;
 }
 
@@ -44,24 +45,24 @@ int toRegexp(std::istream& in, std::ostream& out) {
 }
 
 int main(int argc, char* argv[]) {
-  
+
   int fromTo = 0;
   int c;
-  
+
   while (1) {
     static struct option long_options[] = {
       {"from", no_argument,       &fromTo, FROM},
       {"to",   no_argument,       &fromTo, TO},
       {0, 0, 0, 0}
     };
-  
+
     int option_index = 0;
-     
+
     c = getopt_long (argc, argv, "", long_options, &option_index);
 
     if (c == -1)
       break;
-  
+
     switch (c) {
     case 0:
       break;
@@ -84,7 +85,7 @@ more:
     std::cerr << "error" << std::endl;
     res = 1;
   }
-  
+
   if(c != -1) delete in;
   return res;
 }
\ No newline at end of file
-- 
GitLab