From fe84aa11f64a18b9b3da655eb2be5e724dcbee9b Mon Sep 17 00:00:00 2001 From: Daniele Forsi Date: Sat, 6 Apr 2024 18:50:08 +0200 Subject: [PATCH] Fix memleaks found with AddressSanitizer/LeakSanitizer Found with: ASAN_OPTIONS="detect_odr_violation=1,strip_path_prefix=$(pwd)/" build/sdrangel Fixes: Direct leak of 72 byte(s) in 1 object(s) allocated from: #0 0x7f7b94ef46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95 #1 0x7f7b929ff74c in MainSettings::load() sdrbase/settings/mainsettings.cpp:153 #2 0x7f7b947614f6 in MainWindow::loadSettings() sdrgui/mainwindow.cpp:1230 #3 0x7f7b94759e11 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:211 #4 0x55b694e0a175 in runQtApplication app/main.cpp:196 #5 0x55b694e07ab7 in main app/main.cpp:248 #6 0x7f7b8f4456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 Indirect leak of 136 byte(s) in 1 object(s) allocated from: #0 0x7f7b94ef46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95 #1 0x7f7b929e734d in QList::node_construct(QList::Node*, Preset const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:465 #2 0x7f7b929e734d in QList::append(Preset const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:625 #3 0x7f7b929e734d in QList::push_back(Preset const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:377 #4 0x7f7b929e734d in Configuration::deserialize(QByteArray const&) sdrbase/settings/configuration.cpp:112 #5 0x7f7b929ff934 in MainSettings::load() sdrbase/settings/mainsettings.cpp:155 #6 0x7f7b947614f6 in MainWindow::loadSettings() sdrgui/mainwindow.cpp:1230 #7 0x7f7b94759e11 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:211 #8 0x55b694e0a175 in runQtApplication app/main.cpp:196 #9 0x55b694e07ab7 in main app/main.cpp:248 #10 0x7f7b8f4456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 Indirect leak of 32 byte(s) in 1 object(s) allocated from: #0 0x7f7b94ef46c8 in operator new(unsigned long) ../../../../src/libsanitizer/asan/asan_new_delete.cpp:95 #1 0x7f7b929e9706 in QList::node_construct(QList::Node*, Preset::DeviceConfig const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:465 #2 0x7f7b929e9706 in QList::append(Preset::DeviceConfig const&) /usr/include/x86_64-linux-gnu/qt5/QtCore/qlist.h:625 #3 0x7f7b929f627c in Preset::deserialize(QByteArray const&) sdrbase/settings/preset.cpp:193 #4 0x7f7b929e74ca in Configuration::deserialize(QByteArray const&) sdrbase/settings/configuration.cpp:113 #5 0x7f7b929ff934 in MainSettings::load() sdrbase/settings/mainsettings.cpp:155 #6 0x7f7b947614f6 in MainWindow::loadSettings() sdrgui/mainwindow.cpp:1230 #7 0x7f7b94759e11 in MainWindow::MainWindow(qtwebapp::LoggerWithFile*, MainParser const&, QWidget*) sdrgui/mainwindow.cpp:211 #8 0x55b694e0a175 in runQtApplication app/main.cpp:196 #9 0x55b694e07ab7 in main app/main.cpp:248 #10 0x7f7b8f4456c9 in __libc_start_call_main ../sysdeps/nptl/libc_start_call_main.h:58 --- sdrbase/settings/mainsettings.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sdrbase/settings/mainsettings.cpp b/sdrbase/settings/mainsettings.cpp index 6ab7337ce..e7fe0ccd7 100644 --- a/sdrbase/settings/mainsettings.cpp +++ b/sdrbase/settings/mainsettings.cpp @@ -52,6 +52,11 @@ MainSettings::~MainSettings() { delete m_pluginPresets[i]; } + + for (int i = 0; i < m_configurations.count(); ++i) + { + delete m_configurations[i]; + } } QString MainSettings::getFileLocation() const