[kdepimlibs] [Bug 315910] New: Memory leaks in the parser

Eugene A. Shatokhin eugene.shatokhin at rosalab.ru
Thu Feb 28 14:57:32 GMT 2013


https://bugs.kde.org/show_bug.cgi?id=315910

            Bug ID: 315910
           Summary: Memory leaks in the parser
    Classification: Unclassified
           Product: kdepimlibs
           Version: 4.9
          Platform: Unlisted Binaries
                OS: Linux
            Status: UNCONFIRMED
          Severity: normal
          Priority: NOR
         Component: kholidays
          Assignee: jlayt at kde.org
          Reporter: eugene.shatokhin at rosalab.ru
                CC: kdepim-bugs at kde.org

There are 2 groups of memory leaks in the parser plan2. Over time, they
accumulate to a sizeable amount.

1.  kholidays/parsers/plan2/holidayscannerplan.lpp:102

Memory allocated for a string here (via strdup()) is never freed. The
allocation happens in the following fragment:
--------------------------
\"[^"]*\"           { yylval->sval = strdup( yytext + 1 );
                      yylval->sval[ strlen( yylval->sval ) - 1 ] = 0;
                      return token::STRING; }
--------------------------

2. kholidays/parsers/plan2/holidayparserplan.ypp:72

Memory allocated for a string here is also never freed:
--------------------------
%initial-action
{
    // initialize the initial location object
    @$.begin.filename = new std::string( driver.filePath().toLocal8Bit().data()
);
    @$.end.filename = @$.begin.filename;
};
--------------------------

Valgrind also detects these leaks, here are the extracts from its report:
--------------------------
==14386== 80,103 bytes in 3,259 blocks are definitely lost in loss record
32,797 of 32,838
==14386==    at 0x402A214: malloc (in
/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==14386==    by 0x4139610: strdup (in /lib/i686/libc-2.15.so)
==14386==    by 0x109750F6:
KHolidays::HolidayScannerPlan::lex(KHolidays::HolidayParserPlan::semantic_type*,
KHolidays::location*)
(/usr/src/debug/kdepimlibs-4.9.5/build/kholidays/holidayscannerplan.lpp:102)
==14386==    by 0x1097DEF2: KHolidays::HolidayParserPlan::parse()
(/usr/src/debug/kdepimlibs-4.9.5/build/kholidays/holidayparserplan.cpp:323)
==14386==    by 0x10979F8D: KHolidays::HolidayParserDriverPlan::parseMetadata()
(/usr/src/debug/kdepimlibs-4.9.5/kholidays/parsers/plan2/holidayparserdriverplan.cpp:132)
==14386==    by 0x1097A6AD:
KHolidays::HolidayParserDriverPlan::HolidayParserDriverPlan(QString const&)
(/usr/src/debug/kdepimlibs-4.9.5/kholidays/parsers/plan2/holidayparserdriverplan.cpp:67)
==14386==    by 0x1096BB13: KHolidays::HolidayRegion::Private::Private(QString
const&) (/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:82)
==14386==    by 0x1096A3E3: KHolidays::HolidayRegion::HolidayRegion(QString
const&) (/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:114)
==14386==    by 0x1096A611: KHolidays::HolidayRegion::countryCode(QString
const&) (/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:176)
==14386==    by 0x1096ABC4: KHolidays::HolidayRegion::defaultRegionCode(QString
const&, QString const&)
(/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:437)
==14386==    by 0x17D7DC8C:
CalendarEngine::holidayCalendarSourceRequest(QString const&, QStringList
const&, QString const&)
(/usr/src/debug/kde-workspace-4.9.5/plasma/generic/dataengines/calendar/calendarengine.cpp:121)
==14386==    by 0x17D81094: CalendarEngine::sourceRequestEvent(QString const&)
(/usr/src/debug/kde-workspace-4.9.5/plasma/generic/dataengines/calendar/calendarengine.cpp:78)
==14386==    by 0x43779B4: Plasma::DataEnginePrivate::requestSource(QString
const&, bool*) (/usr/src/debug/kdelibs-4.9.5/plasma/dataengine.cpp:707)
==14386==    by 0x4377AC0: Plasma::DataEngine::query(QString const&) const
(/usr/src/debug/kdelibs-4.9.5/plasma/dataengine.cpp:136)
==14386==    by 0x10954646:
Plasma::CalendarTablePrivate::defaultHolidaysRegion()
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/calendartable.cpp:317)
==14386==    by 0x1094CF40:
Plasma::CalendarTable::applyConfiguration(KConfigGroup)
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/calendartable.cpp:887)
==14386==    by 0x109484F5: Plasma::Calendar::applyConfiguration(KConfigGroup)
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/calendar.cpp:384)
==14386==    by 0x109410B6: ClockApplet::configChanged()
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/clockapplet.cpp:459)
==14386==    by 0x1093C724: ClockApplet::init()
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/clockapplet.cpp:612)
==14386==    by 0x10907E7D: Clock::init()
(/usr/src/debug/kde-workspace-4.9.5/plasma/generic/applets/digital-clock/clock.cpp:77)
==14386==    by 0x435AF36: Plasma::ContainmentPrivate::initApplets()
(/usr/src/debug/kdelibs-4.9.5/plasma/containment.cpp:463)
==14386==    by 0x4370001: Plasma::CoronaPrivate::importLayout(KConfigBase
const&, bool) (/usr/src/debug/kdelibs-4.9.5/plasma/corona.cpp:1067)
==14386==    by 0x4370D74: Plasma::Corona::loadLayout(QString const&)
(/usr/src/debug/kdelibs-4.9.5/plasma/corona.cpp:278)
==14386==    by 0x4370E4D: Plasma::Corona::initializeLayout(QString const&)
(/usr/src/debug/kdelibs-4.9.5/plasma/corona.cpp:181)
==14386==    by 0x4096E97: PlasmaApp::corona(bool)
(/usr/src/debug/kde-workspace-4.9.5/plasma/desktop/shell/plasmaapp.cpp:850)
==14386==    by 0x409721B: PlasmaApp::setupDesktop()
(/usr/src/debug/kde-workspace-4.9.5/plasma/desktop/shell/plasmaapp.cpp:312)
==14386==    by 0x4098978: PlasmaApp::qt_static_metacall(QObject*,
QMetaObject::Call, int, void**)
(/usr/src/debug/kde-workspace-4.9.5/build/plasma/desktop/shell/plasmaapp.moc:125)
==14386==    by 0x575F5B9: QMetaCallEvent::placeMetaCall(QObject*) (in
/usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x576429A: QObject::event(QEvent*) (in
/usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x574E169: QCoreApplication::event(QEvent*) (in
/usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x5A0CD40: QApplication::event(QEvent*) (in
/usr/lib/libQtGui.so.4.8.4)
==14386==    by 0x5A0B6EB: QApplicationPrivate::notify_helper(QObject*,
QEvent*) (in /usr/lib/libQtGui.so.4.8.4)
==14386==    by 0x5A0D71E: QApplication::notify(QObject*, QEvent*) (in
/usr/lib/libQtGui.so.4.8.4)
==14386==    by 0x502BD00: KApplication::notify(QObject*, QEvent*)
(/usr/src/debug/kdelibs-4.9.5/kdeui/kernel/kapplication.cpp:311)
==14386==    by 0x574DBBD: QCoreApplication::notifyInternal(QObject*, QEvent*)
(in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x57516AF: QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) (in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x5751A9B: QCoreApplication::sendPostedEvents(QObject*, int)
(in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x577EDB3: postEventSourceDispatch(_GSource*, int (*)(void*),
void*) (in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x95108B2: g_main_context_dispatch (in
/lib/libglib-2.0.so.0.3400.3)
==14386==    by 0x9510C4F: ??? (in /lib/libglib-2.0.so.0.3400.3)

==14386== 
==14386== 5,588 (336 direct, 5,252 indirect) bytes in 84 blocks are definitely
lost in loss record 32,515 of 32,838
==14386==    at 0x4029CFA: operator new(unsigned int) (in
/usr/lib/valgrind/vgpreload_memcheck-x86-linux.so)
==14386==    by 0x1097C97D: KHolidays::HolidayParserPlan::parse()
(/usr/src/debug/kdepimlibs-4.9.5/build/kholidays/holidayparserplan.ypp:72)
==14386==    by 0x10979F8D: KHolidays::HolidayParserDriverPlan::parseMetadata()
(/usr/src/debug/kdepimlibs-4.9.5/kholidays/parsers/plan2/holidayparserdriverplan.cpp:132)
==14386==    by 0x1097A6AD:
KHolidays::HolidayParserDriverPlan::HolidayParserDriverPlan(QString const&)
(/usr/src/debug/kdepimlibs-4.9.5/kholidays/parsers/plan2/holidayparserdriverplan.cpp:67)
==14386==    by 0x1096BB13: KHolidays::HolidayRegion::Private::Private(QString
const&) (/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:82)
==14386==    by 0x1096A3E3: KHolidays::HolidayRegion::HolidayRegion(QString
const&) (/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:114)
==14386==    by 0x1096A591: KHolidays::HolidayRegion::languageCode(QString
const&) (/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:191)
==14386==    by 0x1096ACF4: KHolidays::HolidayRegion::defaultRegionCode(QString
const&, QString const&)
(/usr/src/debug/kdepimlibs-4.9.5/kholidays/holidayregion.cpp:442)
==14386==    by 0x17D7DC8C:
CalendarEngine::holidayCalendarSourceRequest(QString const&, QStringList
const&, QString const&)
(/usr/src/debug/kde-workspace-4.9.5/plasma/generic/dataengines/calendar/calendarengine.cpp:121)
==14386==    by 0x17D81094: CalendarEngine::sourceRequestEvent(QString const&)
(/usr/src/debug/kde-workspace-4.9.5/plasma/generic/dataengines/calendar/calendarengine.cpp:78)
==14386==    by 0x43779B4: Plasma::DataEnginePrivate::requestSource(QString
const&, bool*) (/usr/src/debug/kdelibs-4.9.5/plasma/dataengine.cpp:707)
==14386==    by 0x4377AC0: Plasma::DataEngine::query(QString const&) const
(/usr/src/debug/kdelibs-4.9.5/plasma/dataengine.cpp:136)
==14386==    by 0x10954646:
Plasma::CalendarTablePrivate::defaultHolidaysRegion()
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/calendartable.cpp:317)
==14386==    by 0x1094CF40:
Plasma::CalendarTable::applyConfiguration(KConfigGroup)
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/calendartable.cpp:887)
==14386==    by 0x109484F5: Plasma::Calendar::applyConfiguration(KConfigGroup)
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/calendar.cpp:384)
==14386==    by 0x109410B6: ClockApplet::configChanged()
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/clockapplet.cpp:459)
==14386==    by 0x1093C724: ClockApplet::init()
(/usr/src/debug/kde-workspace-4.9.5/libs/plasmaclock/clockapplet.cpp:612)
==14386==    by 0x10907E7D: Clock::init()
(/usr/src/debug/kde-workspace-4.9.5/plasma/generic/applets/digital-clock/clock.cpp:77)
==14386==    by 0x435AF36: Plasma::ContainmentPrivate::initApplets()
(/usr/src/debug/kdelibs-4.9.5/plasma/containment.cpp:463)
==14386==    by 0x4370001: Plasma::CoronaPrivate::importLayout(KConfigBase
const&, bool) (/usr/src/debug/kdelibs-4.9.5/plasma/corona.cpp:1067)
==14386==    by 0x4370D74: Plasma::Corona::loadLayout(QString const&)
(/usr/src/debug/kdelibs-4.9.5/plasma/corona.cpp:278)
==14386==    by 0x4370E4D: Plasma::Corona::initializeLayout(QString const&)
(/usr/src/debug/kdelibs-4.9.5/plasma/corona.cpp:181)
==14386==    by 0x4096E97: PlasmaApp::corona(bool)
(/usr/src/debug/kde-workspace-4.9.5/plasma/desktop/shell/plasmaapp.cpp:850)
==14386==    by 0x409721B: PlasmaApp::setupDesktop()
(/usr/src/debug/kde-workspace-4.9.5/plasma/desktop/shell/plasmaapp.cpp:312)
==14386==    by 0x4098978: PlasmaApp::qt_static_metacall(QObject*,
QMetaObject::Call, int, void**)
(/usr/src/debug/kde-workspace-4.9.5/build/plasma/desktop/shell/plasmaapp.moc:125)
==14386==    by 0x575F5B9: QMetaCallEvent::placeMetaCall(QObject*) (in
/usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x576429A: QObject::event(QEvent*) (in
/usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x574E169: QCoreApplication::event(QEvent*) (in
/usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x5A0CD40: QApplication::event(QEvent*) (in
/usr/lib/libQtGui.so.4.8.4)
==14386==    by 0x5A0B6EB: QApplicationPrivate::notify_helper(QObject*,
QEvent*) (in /usr/lib/libQtGui.so.4.8.4)
==14386==    by 0x5A0D71E: QApplication::notify(QObject*, QEvent*) (in
/usr/lib/libQtGui.so.4.8.4)
==14386==    by 0x502BD00: KApplication::notify(QObject*, QEvent*)
(/usr/src/debug/kdelibs-4.9.5/kdeui/kernel/kapplication.cpp:311)
==14386==    by 0x574DBBD: QCoreApplication::notifyInternal(QObject*, QEvent*)
(in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x57516AF: QCoreApplicationPrivate::sendPostedEvents(QObject*,
int, QThreadData*) (in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x5751A9B: QCoreApplication::sendPostedEvents(QObject*, int)
(in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x577EDB3: postEventSourceDispatch(_GSource*, int (*)(void*),
void*) (in /usr/lib/libQtCore.so.4.8.4)
==14386==    by 0x95108B2: g_main_context_dispatch (in
/lib/libglib-2.0.so.0.3400.3)
==14386==    by 0x9510C4F: ??? (in /lib/libglib-2.0.so.0.3400.3)
==14386==    by 0x9510D30: g_main_context_iteration (in
/lib/libglib-2.0.so.0.3400.3)
==14386==    by 0x577EF37:
QEventDispatcherGlib::processEvents(QFlags<QEventLoop::ProcessEventsFlag>) (in
/usr/lib/libQtCore.so.4.8.4)
--------------------------


Reproducible: Always




OS: ROSA Desktop Fresh 2012 x86-64
KDE: 4.9.5
Qt: 4.8.4

-- 
You are receiving this mail because:
You are on the CC list for the bug.



More information about the Kdepim-bugs mailing list