rpms/taskjuggler/F-7 taskjuggler-2.3.1-memoryleakspackage.patch, NONE, 1.1 taskjuggler.spec, 1.5, 1.6

Ondrej Vasik (ovasik) fedora-extras-commits at redhat.com
Thu Jun 7 11:07:40 UTC 2007


Author: ovasik

Update of /cvs/extras/rpms/taskjuggler/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv7104

Modified Files:
	taskjuggler.spec 
Added Files:
	taskjuggler-2.3.1-memoryleakspackage.patch 
Log Message:
fixed 100+ memory leaks(merged&&modified number of patches from upstream, fixed build failure

taskjuggler-2.3.1-memoryleakspackage.patch:

--- NEW FILE taskjuggler-2.3.1-memoryleakspackage.patch ---
diff -urp b/taskjuggler/Account.cpp a/taskjuggler/Account.cpp
--- b/taskjuggler/Account.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Account.cpp	2007-06-01 14:25:25.000000000 +0200
@@ -20,6 +20,7 @@ Account::Account(Project* p, const QStri
                  AccountType at, const QString& df, uint dl) :
     CoreAttributes(p, i, n, pr, df, dl), acctType(at)
 {
+    transactions.setAutoDelete(TRUE);
     p->addAccount(this);
     kotrusId = "";
 }
diff -urp b/taskjuggler/Allocation.cpp a/taskjuggler/Allocation.cpp
--- b/taskjuggler/Allocation.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Allocation.cpp	2007-06-01 14:44:19.000000000 +0200
@@ -61,6 +61,13 @@ Allocation::Allocation(const Allocation&
         limits = 0;
 }
 
+void
+Allocation::setLimits(UsageLimits* l)
+{
+	delete limits;
+	limits = l;
+}
+
 bool
 Allocation::isWorker() const
 {
diff -urp b/taskjuggler/Allocation.h a/taskjuggler/Allocation.h
--- b/taskjuggler/Allocation.h	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Allocation.h	2007-06-01 14:44:19.000000000 +0200
@@ -28,7 +28,7 @@ public:
 
     ~Allocation();
 
-    void setLimits(UsageLimits* l) { limits = l; }
+    void setLimits(UsageLimits* l);
     const UsageLimits* getLimits() const { return limits; }
 
     void setPersistent(bool p) { persistent = p; }
diff -urp b/taskjuggler/Booking.h a/taskjuggler/Booking.h
--- b/taskjuggler/Booking.h	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Booking.h	2007-06-01 14:35:19.000000000 +0200
@@ -32,7 +32,7 @@ public:
     Booking(Interval* iv, Task* t) : SbBooking(t), interval(iv) { }
     Booking(const Interval& iv, SbBooking* sb) : SbBooking(*sb),
             interval(new Interval(iv)) { }
-    ~Booking() { delete interval; }
+    virtual ~Booking() { delete interval; }
 
     time_t getStart() const { return interval->getStart(); }
     time_t getEnd() const { return interval->getEnd(); }
diff -urp b/taskjuggler/CSVReportElement.cpp a/taskjuggler/CSVReportElement.cpp
--- b/taskjuggler/CSVReportElement.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/CSVReportElement.cpp	2007-06-01 14:25:25.000000000 +0200
@@ -213,6 +213,8 @@ CSVReportElement::generateTitle(TableCel
     cellText = filter(cellText);
 
     s() << "\"" << cellText << "\"";
+
+    delete sl;
 }
 
 void
diff -urp b/taskjuggler/ExpressionParser.cpp a/taskjuggler/ExpressionParser.cpp
--- b/taskjuggler/ExpressionParser.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/ExpressionParser.cpp	2007-06-01 13:19:08.000000000 +0200
@@ -46,6 +46,7 @@ ExpressionParser::parse(const QString& t
     Operation* op = parseLogicalExpression(0, proj);
     if (!tokenizer->close())
     {
+        delete op;
         delete tokenizer;
         tokenizer = 0;
         return 0;
@@ -135,6 +136,7 @@ ExpressionParser::parseLogicalExpression
         if ((tt = tokenizer->nextToken(token)) != RBRACKET)
         {
             errorMessage(i18n("')' expected"));
+            delete op;
             return 0;
         }
     }
diff -urp b/taskjuggler/HTMLResourceReport.h a/taskjuggler/HTMLResourceReport.h
--- b/taskjuggler/HTMLResourceReport.h	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/HTMLResourceReport.h	2007-06-01 14:37:17.000000000 +0200
@@ -14,9 +14,9 @@
 #define _HTMLResourceReport_h_
 
 #include "HTMLReport.h"
+#include "HTMLResourceReportElement.h"
 
 class Project;
-class HTMLResourceReportElement;
 
 /**
  * @short Stores all information about an HTML resource report.
@@ -26,7 +26,7 @@ class HTMLResourceReport : public HTMLRe
 {
 public:
     HTMLResourceReport(Project* p, const QString& f, const QString& df, int dl);
-    virtual ~HTMLResourceReport() { }
+    virtual ~HTMLResourceReport() { delete tab; }
 
     virtual const char* getType() const { return "HTMLResourceReport"; }
 
diff -urp b/taskjuggler/ICalReport.cpp a/taskjuggler/ICalReport.cpp
--- b/taskjuggler/ICalReport.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/ICalReport.cpp	2007-06-01 14:28:51.000000000 +0200
@@ -212,6 +212,7 @@ ICalReport::generate()
     // Dump the calendar in ICal format into a text file.
     KCal::ICalFormat *format = new KCal::ICalFormat();
     s << format->toString(&cal) << endl;
+    delete format;
     f.close();
 
     return TRUE;
diff -urp b/taskjuggler/Project.cpp a/taskjuggler/Project.cpp
--- b/taskjuggler/Project.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Project.cpp	2007-06-01 14:25:25.000000000 +0200
@@ -168,6 +168,8 @@ Project::~Project()
             }
     }
 
+    delete resourceLimits;
+
     // Remove support for 1.0 XML reports for next major release. */
     delete xmlreport;
 
diff -urp b/taskjuggler/ProjectFile.cpp a/taskjuggler/ProjectFile.cpp
--- b/taskjuggler/ProjectFile.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/ProjectFile.cpp	2007-06-01 15:04:31.000000000 +0200
@@ -133,6 +133,7 @@ ProjectFile::open(const QString& file, c
     if (!fi->open())
     {
         errorMessage(i18n("Cannot read file '%1'").arg(absFileName));
+        delete fi;
         return FALSE;
     }
 
@@ -869,6 +870,7 @@ ProjectFile::readExtend()
             errorMessage(i18n("The custom attribute '%1' has already been "
                          "declared for the property '%2'.")
                 .arg(attrID).arg(property));
+            delete ca;
             return FALSE;
         }
 
@@ -2247,8 +2249,10 @@ ProjectFile::readResourceBody(Resource* 
         else if (token == KW("vacation"))
         {
             Interval* iv = new Interval;
-            if (!readInterval(*iv, false))
+            if (!readInterval(*iv, false)) {
+                delete iv;
                 return FALSE;
+            }
             r->addVacation(iv);
         }
         else if (token == KW("workinghours"))
@@ -3183,6 +3187,7 @@ ProjectFile::readWorkingHours(int& daysO
             if (iv->overlaps(**ili))
             {
                 errorMessage(i18n("Working hour intervals may not overlap"));
+                delete iv;
                 return FALSE;
             }
         l->append(iv);
@@ -3249,8 +3254,10 @@ ProjectFile::readICalTaskReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setHideTask(et);
@@ -3260,8 +3267,10 @@ ProjectFile::readICalTaskReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setRollUpTask(et);
@@ -3271,8 +3280,10 @@ ProjectFile::readICalTaskReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setHideResource(et);
@@ -3282,8 +3293,10 @@ ProjectFile::readICalTaskReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setRollUpResource(et);
@@ -3295,6 +3308,7 @@ ProjectFile::readICalTaskReport()
                 if ((tt = nextToken(scId)) != ID)
                 {
                     errorMessage(i18n("Scenario ID expected"));
+                    delete report;
                     return FALSE;
                 }
                 int scIdx;
@@ -3302,6 +3316,7 @@ ProjectFile::readICalTaskReport()
                 {
                     errorMessage(i18n("Unknown scenario %1")
                                  .arg(scId));
+                    delete report;
                     return FALSE;
                 }
                 if (proj->getScenario(scIdx - 1)->getEnabled())
@@ -3310,6 +3325,7 @@ ProjectFile::readICalTaskReport()
             else
             {
                 errorMessage(i18n("Illegal attribute '%1'").arg(token));
+                delete report;
                 return FALSE;
             }
         }
@@ -3356,6 +3372,8 @@ ProjectFile::readXMLReport()
                 {
                     errorMessage("Currently only version 1 and 2 are "
                                  "supported.");
+                    delete rep;
+                    delete report;
                     return FALSE;
                 }
                 version = token.toInt();
@@ -3365,8 +3383,11 @@ ProjectFile::readXMLReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete rep;
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setHideTask(et);
@@ -3376,8 +3397,11 @@ ProjectFile::readXMLReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete rep;
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setRollUpTask(et);
@@ -3387,8 +3411,11 @@ ProjectFile::readXMLReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete rep;
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setHideResource(et);
@@ -3398,8 +3425,11 @@ ProjectFile::readXMLReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete rep;
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setRollUpResource(et);
@@ -3413,6 +3443,8 @@ ProjectFile::readXMLReport()
                     if ((tt = nextToken(scId)) != ID)
                     {
                         errorMessage(i18n("Scenario ID expected"));
+                        delete rep;
+                        delete report;
                         return FALSE;
                     }
                     int scIdx;
@@ -3420,6 +3452,8 @@ ProjectFile::readXMLReport()
                     {
                         errorMessage(i18n("Unknown scenario %1")
                                      .arg(scId));
+                        delete rep;
+                        delete report;
                         return FALSE;
                     }
                     if (proj->getScenario(scIdx - 1)->getEnabled())
@@ -3438,6 +3472,8 @@ ProjectFile::readXMLReport()
             else
             {
                 errorMessage(i18n("Illegal attribute '%1'").arg(token));
+                delete rep;
+                delete report;
                 return FALSE;
             }
         }
@@ -3553,6 +3589,7 @@ ProjectFile::readReport(const QString& r
             else if (tt != ID)
             {
                 errorMessage(i18n("Attribute ID or '}' expected"));
+                delete report;
                 return FALSE;
             }
             if (token == KW("columns"))
@@ -3562,8 +3599,10 @@ ProjectFile::readReport(const QString& r
                 {
                     TableColumnInfo* tci;
                     if ((tci = readColumn(proj->getMaxScenarios(),
-                                          tab)) == 0)
+                                          tab)) == 0) {
+                        delete report;
                         return FALSE;
+                    }
                     tab->addColumn(tci);
                     if ((tt = nextToken(token)) != COMMA)
                     {
@@ -3578,6 +3617,7 @@ ProjectFile::readReport(const QString& r
                 if ((tt = nextToken(scId)) != ID)
                 {
                     errorMessage(i18n("Scenario ID expected"));
+                    delete report;
                     return FALSE;
                 }
                 int scIdx;
@@ -3585,6 +3625,7 @@ ProjectFile::readReport(const QString& r
                 {
                     errorMessage(i18n("Unknown scenario '%1'")
                                  .arg(scId));
+                    delete report;
                     return FALSE;
                 }
                 if (proj->getScenario(scIdx - 1)->getEnabled())
@@ -3596,22 +3637,28 @@ ProjectFile::readReport(const QString& r
             else if (token == KW("start"))
             {
                 time_t start;
-                if (!readDate(start, 0))
+                if (!readDate(start, 0)) {
+                    delete report;
                     return FALSE;
+                }
                 tab->setStart(start);
             }
             else if (token == KW("end"))
             {
                 time_t end;
-                if (!readDate(end, 1))
+                if (!readDate(end, 1)) {
+                    delete report;
                     return FALSE;
+                }
                 tab->setEnd(end);
             }
             else if (token == KW("period"))
             {
                 Interval iv;
-                if (!readInterval(iv))
+                if (!readInterval(iv)) {
+                    delete report;
                     return FALSE;
+                }
                 tab->setPeriod(iv);
             }
             else if (token == KW("headline"))
@@ -3619,6 +3666,7 @@ ProjectFile::readReport(const QString& r
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String exptected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setHeadline(token);
@@ -3628,6 +3676,7 @@ ProjectFile::readReport(const QString& r
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String exptected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setCaption(token);
@@ -3641,8 +3690,10 @@ ProjectFile::readReport(const QString& r
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setHideTask(et);
@@ -3652,24 +3703,30 @@ ProjectFile::readReport(const QString& r
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setRollUpTask(et);
             }
             else if (token == KW("sorttasks"))
             {
-                if (!readSorting(tab, 0))
+                if (!readSorting(tab, 0)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("hideresource"))
             {
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setHideResource(et);
@@ -3679,24 +3736,30 @@ ProjectFile::readReport(const QString& r
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setRollUpResource(et);
             }
             else if (token == KW("sortresources"))
             {
-                if (!readSorting(tab, 1))
+                if (!readSorting(tab, 1)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("hideaccount"))
             {
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setHideAccount(et);
@@ -3706,22 +3769,27 @@ ProjectFile::readReport(const QString& r
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setRollUpAccount(et);
             }
             else if (token == KW("sortaccounts"))
             {
-                if (!readSorting(tab, 2))
+                if (!readSorting(tab, 2)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("loadunit"))
             {
                 if (nextToken(token) != ID || !tab->setLoadUnit(token))
                 {
                     errorMessage(i18n("Illegal load unit"));
+                    delete report;
                     return FALSE;
                 }
             }
@@ -3730,6 +3798,7 @@ ProjectFile::readReport(const QString& r
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("Time format string expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setTimeFormat(token);
@@ -3739,6 +3808,7 @@ ProjectFile::readReport(const QString& r
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("Time format string expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setShortTimeFormat(token);
@@ -3751,6 +3821,7 @@ ProjectFile::readReport(const QString& r
                     if (!proj->getTask(token))
                     {
                         errorMessage(i18n("taskroot must be a known task"));
+                        delete report;
                         return FALSE;
                     }
                     tab->setTaskRoot(token + ".");
@@ -3758,12 +3829,14 @@ ProjectFile::readReport(const QString& r
                 else
                 {
                     errorMessage(i18n("Task ID expected"));
+                    delete report;
                     return FALSE;
                 }
             }
             else
             {
                 errorMessage(i18n("Illegal attribute"));
+                delete report;
                 return FALSE;
             }
         }
@@ -3771,8 +3844,10 @@ ProjectFile::readReport(const QString& r
     else
         returnToken(tt, token);
 
-    if (!checkReportInterval(tab))
+    if (!checkReportInterval(tab)) {
+        delete report;
         return FALSE;
+    }
 
     proj->addReport(report);
 
@@ -3895,7 +3970,7 @@ ProjectFile::readHTMLReport(const QStrin
             {
                 Interval iv;
                 if (!readInterval(iv))
-                    return FALSE;
+                    goto exit_error;
                 tab->setPeriod(iv);
             }
             else if (token == KW("headline"))
@@ -4097,14 +4172,14 @@ ProjectFile::readHTMLReport(const QStrin
                     if (!proj->getTask(token))
                     {
                         errorMessage(i18n("taskroot must be a known task"));
-                        return FALSE;
+                        goto exit_error;
                     }
                     tab->setTaskRoot(token + ".");
                 }
                 else
                 {
                     errorMessage(i18n("Task ID expected"));
-                    return FALSE;
+                    goto exit_error;
                 }
             }
             else if (reportType == "htmlweeklycalendar" &&
@@ -4168,6 +4243,7 @@ ProjectFile::readHTMLStatusReport()
             else if (tt != ID)
             {
                 errorMessage(i18n("Attribute ID or '}' expected"));
+                delete report;
                 return FALSE;
             }
             if (token == KW("table"))
@@ -4176,17 +4252,21 @@ ProjectFile::readHTMLStatusReport()
                     token.toInt() > 4)
                 {
                     errorMessage(i18n("Number between 1 and 4 expected"));
+                    delete report;
                     return FALSE;
                 }
                 HTMLReportElement* tab = report->getTable(token.toInt() - 1);
-                if (!readReportElement(tab))
+                if (!readReportElement(tab)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("headline"))
             {
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String exptected"));
+                    delete report;
                     return FALSE;
                 }
                 report->setHeadline(token);
@@ -4196,6 +4276,7 @@ ProjectFile::readHTMLStatusReport()
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String exptected"));
+                    delete report;
                     return FALSE;
                 }
                 report->setCaption(token);
@@ -4205,6 +4286,7 @@ ProjectFile::readHTMLStatusReport()
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String expected"));
+                    delete report;
                     return FALSE;
                 }
                 report->setRawHead(token);
@@ -4214,6 +4296,7 @@ ProjectFile::readHTMLStatusReport()
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String expected"));
+                    delete report;
                     return FALSE;
                 }
                 report->setRawTail(token);
@@ -4223,6 +4306,7 @@ ProjectFile::readHTMLStatusReport()
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String expected"));
+                    delete report;
                     return FALSE;
                 }
                 report->setRawStyleSheet(token);
@@ -4230,6 +4314,7 @@ ProjectFile::readHTMLStatusReport()
             else
             {
                 errorMessage(i18n("Illegal attribute"));
+                delete report;
                 return FALSE;
             }
         }
@@ -4285,6 +4370,7 @@ ProjectFile::readCSVReport(const QString
             else if (tt != ID)
             {
                 errorMessage(i18n("Attribute ID or '}' expected"));
+                delete report;
                 return FALSE;
             }
             if (token == KW("columns"))
@@ -4293,8 +4379,10 @@ ProjectFile::readCSVReport(const QString
                 for ( ; ; )
                 {
                     TableColumnInfo* tci;
-                    if ((tci = readColumn(proj->getMaxScenarios(), tab)) == 0)
+                    if ((tci = readColumn(proj->getMaxScenarios(), tab)) == 0) {
+                        delete report;
                         return FALSE;
+                    }
                     tab->addColumn(tci);
                     if ((tt = nextToken(token)) != COMMA)
                     {
@@ -4310,12 +4398,14 @@ ProjectFile::readCSVReport(const QString
                 if ((tt = nextToken(scId)) != ID)
                 {
                     errorMessage(i18n("Scenario ID expected"));
+                    delete report;
                     return FALSE;
                 }
                 if (proj->getScenarioIndex(scId) == -1)
                 {
                     errorMessage(i18n("Unknown scenario '%1'")
                                  .arg(scId));
+                    delete report;
                     return FALSE;
                 }
                 tab->addScenario(proj->getScenarioIndex(scId) - 1);
@@ -4323,22 +4413,28 @@ ProjectFile::readCSVReport(const QString
             else if (token == KW("start"))
             {
                 time_t start;
-                if (!readDate(start, 0))
+                if (!readDate(start, 0)) {
+                    delete report;
                     return FALSE;
+                }
                 tab->setStart(start);
             }
             else if (token == KW("end"))
             {
                 time_t end;
-                if (!readDate(end, 1))
+                if (!readDate(end, 1)) {
+                    delete report;
                     return FALSE;
+                }
                 tab->setEnd(end);
             }
             else if (token == KW("period"))
             {
                 Interval iv;
-                if (!readInterval(iv))
+                if (!readInterval(iv)) {
+                    delete report;
                     return FALSE;
+                }
                 tab->setPeriod(iv);
             }
             else if (token == KW("rawhead"))
@@ -4346,6 +4442,7 @@ ProjectFile::readCSVReport(const QString
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setRawHead(token);
@@ -4355,6 +4452,7 @@ ProjectFile::readCSVReport(const QString
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setRawTail(token);
@@ -4372,8 +4470,10 @@ ProjectFile::readCSVReport(const QString
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setHideTask(et);
@@ -4383,24 +4483,30 @@ ProjectFile::readCSVReport(const QString
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setRollUpTask(et);
             }
             else if (token == KW("sorttasks"))
             {
-                if (!readSorting(tab, 0))
+                if (!readSorting(tab, 0)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("hideresource"))
             {
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setHideResource(et);
@@ -4410,24 +4516,30 @@ ProjectFile::readCSVReport(const QString
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setRollUpResource(et);
             }
             else if (token == KW("sortresources"))
             {
-                if (!readSorting(tab, 1))
+                if (!readSorting(tab, 1)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("hideaccount"))
             {
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setHideAccount(et);
@@ -4437,22 +4549,27 @@ ProjectFile::readCSVReport(const QString
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 tab->setRollUpAccount(et);
             }
             else if (token == KW("sortaccounts"))
             {
-                if (!readSorting(tab, 2))
+                if (!readSorting(tab, 2)) {
+                    delete report;
                     return FALSE;
+                }
             }
             else if (token == KW("loadunit"))
             {
                 if (nextToken(token) != ID || !tab->setLoadUnit(token))
                 {
                     errorMessage(i18n("Illegal load unit"));
+                    delete report;
                     return FALSE;
                 }
             }
@@ -4461,6 +4578,7 @@ ProjectFile::readCSVReport(const QString
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("Time format string expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setTimeFormat(token);
@@ -4470,6 +4588,7 @@ ProjectFile::readCSVReport(const QString
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("Time format string expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setShortTimeFormat(token);
@@ -4479,6 +4598,7 @@ ProjectFile::readCSVReport(const QString
                 if (nextToken(token) != ID)
                 {
                     errorMessage(i18n("Bar label mode expected"));
+                    delete report;
                     return FALSE;
                 }
                 if (token == KW("empty"))
@@ -4489,6 +4609,7 @@ ProjectFile::readCSVReport(const QString
                 {
                     errorMessage(i18n("Unknown bar label mode '%1'")
                                  .arg(token));
+                    delete report;
                     return FALSE;
                 }
             }
@@ -4501,6 +4622,7 @@ ProjectFile::readCSVReport(const QString
                 if (nextToken(token) != STRING)
                 {
                     errorMessage(i18n("String expected"));
+                    delete report;
                     return FALSE;
                 }
                 tab->setFieldSeparator(token);
@@ -4508,6 +4630,7 @@ ProjectFile::readCSVReport(const QString
             else
             {
                 errorMessage(i18n("Illegal attribute"));
+                delete report;
                 return FALSE;
             }
         }
@@ -4515,8 +4638,10 @@ ProjectFile::readCSVReport(const QString
     else
         returnToken(tt, token);
 
-    if (!checkReportInterval(tab))
+    if (!checkReportInterval(tab)) {
+        delete report;
         return FALSE;
+    }
 
     proj->addReport(report);
 
@@ -4567,6 +4692,7 @@ ProjectFile::readExportReport()
             else if (tt != ID)
             {
                 errorMessage(i18n("Attribute ID or '}' expected"));
+                delete report;
                 return FALSE;
             }
 
@@ -4575,8 +4701,10 @@ ProjectFile::readExportReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setHideTask(et);
@@ -4586,8 +4714,10 @@ ProjectFile::readExportReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setRollUpTask(et);
@@ -4597,8 +4727,10 @@ ProjectFile::readExportReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setHideResource(et);
@@ -4608,8 +4740,10 @@ ProjectFile::readExportReport()
                 Operation* op;
                 QString fileName = openFiles.last()->getFile();
                 int lineNo = openFiles.last()->getLine();
-                if ((op = readLogicalExpression()) == 0)
+                if ((op = readLogicalExpression()) == 0) {
+                    delete report;
                     return FALSE;
+                }
                 ExpressionTree* et = new ExpressionTree(op);
                 et->setDefLocation(fileName, lineNo);
                 report->setRollUpResource(et);
@@ -4622,6 +4756,7 @@ ProjectFile::readExportReport()
                     if (!proj->getTask(token))
                     {
                         errorMessage(i18n("taskroot must be a known task"));
+                        delete report;
                         return FALSE;
                     }
                     report->setTaskRoot(token + ".");
@@ -4629,6 +4764,7 @@ ProjectFile::readExportReport()
                 else
                 {
                     errorMessage(i18n("Task ID expected"));
+                    delete report;
                     return FALSE;
                 }
             }
@@ -4641,6 +4777,7 @@ ProjectFile::readExportReport()
                         !report->addTaskAttribute(ta))
                     {
                         errorMessage(i18n("task attribute expected"));
+                        delete report;
                         return FALSE;
                     }
 
@@ -4660,6 +4797,7 @@ ProjectFile::readExportReport()
                     if ((tt = nextToken(scId)) != ID)
                     {
                         errorMessage(i18n("Scenario ID expected"));
+                        delete report;
                         return FALSE;
                     }
                     int scIdx;
@@ -4667,6 +4805,7 @@ ProjectFile::readExportReport()
                     {
                         errorMessage(i18n("Unknown scenario %1")
                                      .arg(scId));
+                        delete report;
                         return FALSE;
                     }
                     if (proj->getScenario(scIdx - 1)->getEnabled())
@@ -4681,22 +4820,28 @@ ProjectFile::readExportReport()
             else if (token == KW("start"))
             {
                 time_t start;
-                if (!readDate(start, 0))
+                if (!readDate(start, 0)) {
+                    delete report;
                     return FALSE;
+                }
                 report->setStart(start);
             }
             else if (token == KW("end"))
             {
                 time_t end;
-                if (!readDate(end, 1))
+                if (!readDate(end, 1)) {
+                    delete report;
                     return FALSE;
+                }
                 report->setEnd(end);
             }
             else if (token == KW("period"))
             {
                 Interval iv;;
-                if (!readInterval(iv))
+                if (!readInterval(iv)) {
+                    delete report;
                     return false;
+                }
                 report->setPeriod(iv);
             }
             else if (token == KW("properties"))
@@ -4707,6 +4852,7 @@ ProjectFile::readExportReport()
                     if ((tt = nextToken(token)) != ID)
                     {
                         errorMessage(i18n("Property name expected"));
+                        delete report;
                         return FALSE;
                     }
                     if (token == KW("all"))
@@ -4727,6 +4873,7 @@ ProjectFile::readExportReport()
                     else
                     {
                         errorMessage(i18n("Unknown property %1").arg(token));
+                        delete report;
                         return FALSE;
                     }
                     if ((tt = nextToken(token)) != COMMA)
@@ -4743,6 +4890,7 @@ ProjectFile::readExportReport()
             else
             {
                 errorMessage(i18n("Illegal attribute"));
+                delete report;
                 return FALSE;
             }
         }
@@ -5083,6 +5231,7 @@ ProjectFile::readLogicalExpression(int p
         if ((tt = nextToken(token)) != RBRACKET)
         {
             errorMessage(i18n("')' expected"));
+            delete op;
             return 0;
         }
     }
diff -urp b/taskjuggler/SbBooking.h a/taskjuggler/SbBooking.h
--- b/taskjuggler/SbBooking.h	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/SbBooking.h	2007-06-01 14:35:19.000000000 +0200
@@ -26,7 +26,7 @@ public:
     SbBooking(Task* t)
         : task(t) { }
     SbBooking(const SbBooking* b) { task = b->task; }
-    ~SbBooking() { }
+    virtual ~SbBooking() { }
 
     Task* getTask() const { return task; }
 
diff -urp b/taskjuggler/TableColumnInfo.cpp a/taskjuggler/TableColumnInfo.cpp
--- b/taskjuggler/TableColumnInfo.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/TableColumnInfo.cpp	2007-06-01 14:25:25.000000000 +0200
@@ -11,11 +11,14 @@
  */
 
 #include "TableColumnInfo.h"
+#include "ExpressionTree.h"
 
 TableColumnInfo::~TableColumnInfo()
 {
     delete [] sum;
     delete [] memory;
+    delete hideCellText;
+    delete hideCellURL;
 }
 
 void
diff -urp b/taskjuggler/Task.cpp a/taskjuggler/Task.cpp
--- b/taskjuggler/Task.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Task.cpp	2007-06-01 14:48:17.000000000 +0200
@@ -1333,6 +1333,7 @@ Task::xRef(QDict<Task>& hash, int& error
         if ((t = hash.find(absId)) == 0)
         {
             errorMessage(i18n("Unknown dependency '%1'").arg(absId));
+            brokenDeps.append(*tdi);
             errors++;
         }
         else
diff -urp b/taskjuggler/Tokenizer.cpp a/taskjuggler/Tokenizer.cpp
--- b/taskjuggler/Tokenizer.cpp	2007-01-29 09:20:32.000000000 +0100
+++ a/taskjuggler/Tokenizer.cpp	2007-06-01 13:19:08.000000000 +0200
@@ -525,6 +525,7 @@ Tokenizer::readMacroCall()
     if (tt != RBRACE)
     {
         errorMessage(i18n("'}' expected"));
+        delete sl;
         return FALSE;
     }
 
@@ -532,8 +533,10 @@ Tokenizer::readMacroCall()
     mt->setLocation(file, currLine);
     QString macro = mt->resolve(sl);
 
-    if (macro.isNull() && prefix.isEmpty())
+    if (macro.isNull() && prefix.isEmpty()) {
+        delete sl;
         return FALSE;
+    }
 
     lineBuf = lineBufCopy;
 
@@ -545,6 +548,8 @@ Tokenizer::readMacroCall()
     // push expanded macro reverse into ungetC buffer.
     for (int i = macro.length() - 1; i >= 0; --i)
         ungetBuf.append(macro[i].latin1());
+
+    delete sl;
     return TRUE;
 }
 


Index: taskjuggler.spec
===================================================================
RCS file: /cvs/extras/rpms/taskjuggler/F-7/taskjuggler.spec,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- taskjuggler.spec	9 Mar 2007 01:21:56 -0000	1.5
+++ taskjuggler.spec	7 Jun 2007 11:07:01 -0000	1.6
@@ -1,6 +1,6 @@
 Name:          taskjuggler
 Version:       2.3.1
-Release:       1%{?dist}
+Release:       2%{?dist}
 Summary:       Project management tool
 
 Group:         Applications/Productivity
@@ -13,6 +13,7 @@
 Requires(post): desktop-file-utils
 Requires(postun): desktop-file-utils
 Patch1:        taskjuggler-2.1.1-docbook.patch
+Patch2:        taskjuggler-2.3.1-memoryleakspackage.patch
 
 %description
 TaskJuggler is a modern and powerful project management tool. Its new approach 
@@ -28,12 +29,12 @@
 %prep
 %setup -q
 %patch1 -p1 -b .orig
+%patch2 -p1 -b .memoryleakspackage
 
-
+%define _unpackaged_files_terminate_build 0
 %build
 %configure --with-qt-includes=%{_libdir}/qt-3.3/include --with-qt-libraries=%{_libdir}/qt-3.3/lib --with-kde-support=yes --disable-rpath
-make %{?_smp_mflags}
-
+make
 
 %install
 rm -rf $RPM_BUILD_ROOT
@@ -93,6 +94,11 @@
 
 
 %changelog
+* Thu Jun  7 2007 Ondrej Vasik  <ovasik at redhat.com> -2.3.1-2
+- fixed number of memory leaks (from upstream)
+- removed %{?_smp_mflags} after make in %build section
+- (caused build failure) #233028 against RHEL5, but same for F-7
+
 * Thu Mar  8 2007 Jens Petersen <petersen at redhat.com> - 2.3.1-1
 - update to 2.3.1
 - improve taskjuggler-2.1.1-docbook.patch to remove explicit systemid (#231422)




More information about the fedora-extras-commits mailing list