Close #442: asan checks failed

Enable ASAN with -DADDRESS_SANITIZER=ON
Fix all findings inside XCA.
This commit is contained in:
Christian Hohnstaedt 2023-09-20 21:03:11 +02:00
parent d50381d9cb
commit c1bee8b38d
8 changed files with 26 additions and 13 deletions

View File

@ -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)

View File

@ -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<enum pki_type> &typelist)
void db_base::updateHeaders()
{
QString s = allHeaders.toData();
foreach(dbheader *h, allHeaders)
delete h;
qDeleteAll(allHeaders);
allHeaders = getHeaders();
allHeaders.fromData(s);
}

View File

@ -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

View File

@ -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*> 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")),

View File

@ -67,6 +67,7 @@ class pki_export : public QObject {
const QString &d, int f, const QString &h);
static QList<const pki_export*> 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:

View File

@ -30,7 +30,7 @@
#include <QFileDialog>
#include <QActionGroup>
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));

View File

@ -75,6 +75,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
QList<XcaTreeView *> views;
dbhistory history;
void exportIndex(const QString &fname, bool hierarchy) const;
QAction *languageMenuEntry(const QStringList &sl);
protected:
void init_images();

View File

@ -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;
}