From 9616d898d45e88327bf038de730081318287caeb Mon Sep 17 00:00:00 2001 From: Trial97 Date: Tue, 11 Feb 2025 10:59:10 +0200 Subject: [PATCH 1/3] Fix some undefined behaviour Signed-off-by: Trial97 (cherry picked from commit bf1084d7fa6503b65bdb63374e5f92020ae4a3d1) --- CMakeLists.txt | 8 ++++---- launcher/launch/LogModel.h | 6 +++--- launcher/ui/widgets/CheckComboBox.cpp | 16 ++++++++-------- launcher/ui/widgets/CheckComboBox.h | 6 +++--- 4 files changed, 18 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7a0ac672b..3753ccab3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -113,14 +113,14 @@ if ((CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL "RelWithDebI else() # AppleClang and Clang message(STATUS "Address Sanitizer available on Clang") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=null") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover=null") endif() elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") # GCC message(STATUS "Address Sanitizer available on GCC") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fno-omit-frame-pointer -fsanitize=undefined -fno-sanitize-recover") link_libraries("asan") elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") message(STATUS "Address Sanitizer available on MSVC") diff --git a/launcher/launch/LogModel.h b/launcher/launch/LogModel.h index 18e51d7e3..bc08053fb 100644 --- a/launcher/launch/LogModel.h +++ b/launcher/launch/LogModel.h @@ -32,12 +32,12 @@ class LogModel : public QAbstractListModel { private /* types */: struct entry { - MessageLevel::Enum level; - QString line; + MessageLevel::Enum level = MessageLevel::Enum::Unknown; + QString line = {}; }; private: /* data */ - QVector m_content; + QVector m_content = {}; int m_maxLines = 1000; // first line in the circular buffer int m_firstLine = 0; diff --git a/launcher/ui/widgets/CheckComboBox.cpp b/launcher/ui/widgets/CheckComboBox.cpp index 41def3ba1..a84e6a8fa 100644 --- a/launcher/ui/widgets/CheckComboBox.cpp +++ b/launcher/ui/widgets/CheckComboBox.cpp @@ -40,7 +40,7 @@ class CheckComboModel : public QIdentityProxyModel { { if (role == Qt::CheckStateRole) { auto txt = QIdentityProxyModel::data(index, Qt::DisplayRole).toString(); - return checked.contains(txt) ? Qt::Checked : Qt::Unchecked; + return m_checked.contains(txt) ? Qt::Checked : Qt::Unchecked; } if (role == Qt::DisplayRole) return QIdentityProxyModel::data(index, Qt::DisplayRole); @@ -50,10 +50,10 @@ class CheckComboModel : public QIdentityProxyModel { { if (role == Qt::CheckStateRole) { auto txt = QIdentityProxyModel::data(index, Qt::DisplayRole).toString(); - if (checked.contains(txt)) { - checked.removeOne(txt); + if (m_checked.contains(txt)) { + m_checked.removeOne(txt); } else { - checked.push_back(txt); + m_checked.push_back(txt); } emit dataChanged(index, index); emit checkStateChanged(); @@ -61,13 +61,13 @@ class CheckComboModel : public QIdentityProxyModel { } return QIdentityProxyModel::setData(index, value, role); } - QStringList getChecked() { return checked; } + QStringList getChecked() { return m_checked; } signals: void checkStateChanged(); private: - QStringList checked; + QStringList m_checked = {}; }; CheckComboBox::CheckComboBox(QWidget* parent) : QComboBox(parent), m_separator(", ") @@ -92,7 +92,7 @@ void CheckComboBox::setSourceModel(QAbstractItemModel* new_model) void CheckComboBox::hidePopup() { - if (!containerMousePress) + if (!m_containerMousePress) QComboBox::hidePopup(); } @@ -138,7 +138,7 @@ bool CheckComboBox::eventFilter(QObject* receiver, QEvent* event) } case QEvent::MouseButtonPress: { auto ev = static_cast(event); - containerMousePress = ev && view()->indexAt(ev->pos()).isValid(); + m_containerMousePress = ev && view()->indexAt(ev->pos()).isValid(); break; } case QEvent::Wheel: diff --git a/launcher/ui/widgets/CheckComboBox.h b/launcher/ui/widgets/CheckComboBox.h index 876c6e3e1..02516982f 100644 --- a/launcher/ui/widgets/CheckComboBox.h +++ b/launcher/ui/widgets/CheckComboBox.h @@ -58,7 +58,7 @@ class CheckComboBox : public QComboBox { void toggleCheckState(int index); private: - QString m_default_text; - QString m_separator; - bool containerMousePress; + QString m_default_text = {}; + QString m_separator = {}; + bool m_containerMousePress = false; }; \ No newline at end of file From 159771f2835ce6d659ab1f6791abf9bcc001e4ef Mon Sep 17 00:00:00 2001 From: Alexandru Ionut Tripon Date: Tue, 11 Feb 2025 21:02:27 +0200 Subject: [PATCH 2/3] Apply suggestions from code review Co-authored-by: TheKodeToad Signed-off-by: Alexandru Ionut Tripon (cherry picked from commit 1d1a4f1b30837e13ebd99c016af171d79697f22f) --- launcher/launch/LogModel.h | 4 ++-- launcher/ui/widgets/CheckComboBox.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/launcher/launch/LogModel.h b/launcher/launch/LogModel.h index bc08053fb..167f74190 100644 --- a/launcher/launch/LogModel.h +++ b/launcher/launch/LogModel.h @@ -33,11 +33,11 @@ class LogModel : public QAbstractListModel { private /* types */: struct entry { MessageLevel::Enum level = MessageLevel::Enum::Unknown; - QString line = {}; + QString line; }; private: /* data */ - QVector m_content = {}; + QVector m_content; int m_maxLines = 1000; // first line in the circular buffer int m_firstLine = 0; diff --git a/launcher/ui/widgets/CheckComboBox.h b/launcher/ui/widgets/CheckComboBox.h index 02516982f..469587762 100644 --- a/launcher/ui/widgets/CheckComboBox.h +++ b/launcher/ui/widgets/CheckComboBox.h @@ -58,7 +58,7 @@ class CheckComboBox : public QComboBox { void toggleCheckState(int index); private: - QString m_default_text = {}; - QString m_separator = {}; + QString m_default_text; + QString m_separator; bool m_containerMousePress = false; }; \ No newline at end of file From 945614015563aaa3a39ab586451670c9d153aea9 Mon Sep 17 00:00:00 2001 From: Alexandru Ionut Tripon Date: Tue, 11 Feb 2025 21:03:04 +0200 Subject: [PATCH 3/3] Update launcher/ui/widgets/CheckComboBox.cpp Signed-off-by: Alexandru Ionut Tripon (cherry picked from commit 22b59e760c0f39749916052b9323e55f4217dd72) --- launcher/ui/widgets/CheckComboBox.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/launcher/ui/widgets/CheckComboBox.cpp b/launcher/ui/widgets/CheckComboBox.cpp index a84e6a8fa..02b629162 100644 --- a/launcher/ui/widgets/CheckComboBox.cpp +++ b/launcher/ui/widgets/CheckComboBox.cpp @@ -67,7 +67,7 @@ class CheckComboModel : public QIdentityProxyModel { void checkStateChanged(); private: - QStringList m_checked = {}; + QStringList m_checked; }; CheckComboBox::CheckComboBox(QWidget* parent) : QComboBox(parent), m_separator(", ")