diff --git a/CMakeLists.txt b/CMakeLists.txt index bb91e090..10510ed5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,10 +17,7 @@ include(cmake/git_version.cmake) ##### Build specifications -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE Release) -endif() - +set(ADDRESS_SANITIZER OFF CACHE BOOL "Enable Address sanitizing") set(CMAKE_POSITION_INDEPENDENT_CODE ON) set(CMAKE_CXX_STANDARD 17) @@ -31,6 +28,12 @@ set(CMAKE_AUTORCC ON) set(CMAKE_AUTOUIC_SEARCH_PATHS "${PROJECT_SOURCE_DIR}/ui") set(CMAKE_AUTOUIC ON) add_compile_definitions(OPENSSL_SUPPRESS_DEPRECATED QT_MESSAGELOGCONTEXT) + +if (ADDRESS_SANITIZER) + add_compile_options(-fsanitize=address -O1 -fno-omit-frame-pointer -g) + set(ASAN_LIB -fsanitize=address) +endif() + file(GLOB UI_FILES ${CMAKE_AUTOUIC_SEARCH_PATHS}/*.ui) configure_file(local.h.in local.h) @@ -75,10 +78,12 @@ endif() target_link_libraries(${CMAKE_PROJECT_NAME} OpenSSL::Crypto ${QT}::Widgets ${QT}::Core ${QT}::Sql ${QT}::Help + ${ASAN_LIB} ) target_link_libraries(xcadoc OpenSSL::Crypto ${QT}::Widgets ${QT}::Core ${QT}::Sql ${QT}::Help + ${ASAN_LIB} ) if (APPLE) diff --git a/lib/db_base.cpp b/lib/db_base.cpp index 1606538a..a29178aa 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -43,6 +43,7 @@ db_base::db_base(const char *classname) db_base::~db_base() { saveHeaderState(); + qDeleteAll(allHeaders); delete rootItem; delete treeItem; } @@ -150,8 +151,8 @@ void db_base::reloadContainer(const QList &typelist) void db_base::updateHeaders() { QString s = allHeaders.toData(); - foreach(dbheader *h, allHeaders) - delete h; + + qDeleteAll(allHeaders); allHeaders = getHeaders(); allHeaders.fromData(s); } diff --git a/lib/main.cpp b/lib/main.cpp index 9478bef9..220876a0 100644 --- a/lib/main.cpp +++ b/lib/main.cpp @@ -24,6 +24,7 @@ #include "pki_evp.h" #include "pki_base.h" #include "arguments.h" +#include "pki_export.h" #include "db_x509.h" #if defined(Q_OS_WIN32) //For the segfault handler @@ -564,6 +565,7 @@ int main(int argc, char *argv[]) << pki->getIntName(); delete mainwin; delete gui; + pki_export::free_elements(); #if defined(Q_OS_WIN32) FreeConsole(); #endif diff --git a/lib/pki_export.cpp b/lib/pki_export.cpp index c4111468..bf644a4b 100644 --- a/lib/pki_export.cpp +++ b/lib/pki_export.cpp @@ -39,6 +39,11 @@ const pki_export *pki_export::by_id(int id) return NULL; } +void pki_export::free_elements() +{ + qDeleteAll(elements); +} + QList pki_export::elements { new pki_export( 1, x509, "crt", "PEM", F_PEM | F_USUAL | F_SINGLE, tr("PEM Text format with headers")), new pki_export( 3, x509, "pem", "PEM", F_PEM | F_MULTI, tr("Concatenated list of all selected items in one PEM text file")), diff --git a/lib/pki_export.h b/lib/pki_export.h index 4a96ba01..ae9a606f 100644 --- a/lib/pki_export.h +++ b/lib/pki_export.h @@ -67,6 +67,7 @@ class pki_export : public QObject { const QString &d, int f, const QString &h); static QList select(enum pki_type, int); static const pki_export *by_id(int id); + static void free_elements(); bool match_all(int match_flags) const; private: diff --git a/widgets/MW_menu.cpp b/widgets/MW_menu.cpp index 389a6a5f..5b793b31 100644 --- a/widgets/MW_menu.cpp +++ b/widgets/MW_menu.cpp @@ -30,7 +30,7 @@ #include #include -static QAction *languageMenuEntry(const QStringList &sl) +QAction *MainWindow::languageMenuEntry(const QStringList &sl) { QString lang, tooltip; QLocale locale; @@ -48,7 +48,7 @@ static QAction *languageMenuEntry(const QStringList &sl) if (sl.length() > 2) tooltip += " - " + sl[2]; - QAction *a = new QAction(lang, NULL); + QAction *a = new QAction(lang, this); a->setToolTip(tooltip); a->setData(QVariant(locale)); a->setDisabled(!XcaApplication::languageAvailable(locale)); diff --git a/widgets/MainWindow.h b/widgets/MainWindow.h index a355fe0a..dca22621 100644 --- a/widgets/MainWindow.h +++ b/widgets/MainWindow.h @@ -75,6 +75,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow QList views; dbhistory history; void exportIndex(const QString &fname, bool hierarchy) const; + QAction *languageMenuEntry(const QStringList &sl); protected: void init_images(); diff --git a/widgets/XcaApplication.cpp b/widgets/XcaApplication.cpp index a3bedfcd..9e8466db 100644 --- a/widgets/XcaApplication.cpp +++ b/widgets/XcaApplication.cpp @@ -35,12 +35,9 @@ static QString defaultlang() } XcaApplication::XcaApplication(int &argc, char *argv[]) - :QApplication(argc, argv) + :QApplication(argc, argv), mainw(nullptr), qtTr(nullptr), xcaTr(nullptr) { QLocale lang; - qtTr = NULL; - xcaTr = NULL; - mainw = NULL; QFile file(defaultlang()); @@ -205,5 +202,6 @@ bool XcaApplication::notify(QObject* receiver, QEvent* event) XcaApplication::~XcaApplication() { + delete xcaTr; + delete qtTr; } -