From 3168fbde6157365f73fc19d07f16b8e5fb377dc4 Mon Sep 17 00:00:00 2001 From: Arne <78976058+4rneee@users.noreply.github.com> Date: Sat, 1 Aug 2026 12:15:50 +0000 Subject: [PATCH] fix: make Notebook::findItem safe (#7137) Reviewed-by: Nerixyz Reviewed-by: pajlada --- src/widgets/Notebook.cpp | 23 +++++++++++++---------- src/widgets/Notebook.hpp | 3 ++- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/src/widgets/Notebook.cpp b/src/widgets/Notebook.cpp index 52ef48bc4..f2596fb72 100644 --- a/src/widgets/Notebook.cpp +++ b/src/widgets/Notebook.cpp @@ -212,9 +212,9 @@ void Notebook::removePage(QWidget *page) void Notebook::duplicatePage(QWidget *page) { - auto *item = this->findItem(page); - assert(item != nullptr); - if (item == nullptr) + auto item = this->findItem(page); + assert(item.has_value()); + if (!item.has_value()) { return; } @@ -331,8 +331,8 @@ void Notebook::select(QWidget *page, bool focusPage, bool recordInHistory) if (page) { // A new page has been selected, mark it as selected & focus one of its splits - auto *item = this->findItem(page); - if (!item) + auto item = this->findItem(page); + if (!item.has_value()) { return; } @@ -368,8 +368,11 @@ void Notebook::select(QWidget *page, bool focusPage, bool recordInHistory) // Hide the previously selected page this->selectedPage_->hide(); - auto *item = this->findItem(this->selectedPage_); - if (!item) + auto item = + std::ranges::find_if(this->items_, [this](const auto &item) { + return this->selectedPage_ == item.page; + }); + if (item == this->items_.end()) { return; } @@ -476,7 +479,7 @@ bool Notebook::containsPage(QWidget *page) const }); } -Notebook::Item *Notebook::findItem(QWidget *page) +std::optional Notebook::findItem(QWidget *page) { auto it = std::find_if(this->items_.begin(), this->items_.end(), [page](const auto &item) { @@ -484,9 +487,9 @@ Notebook::Item *Notebook::findItem(QWidget *page) }); if (it != this->items_.end()) { - return &(*it); + return *it; } - return nullptr; + return std::nullopt; } bool Notebook::containsChild(const QObject *obj, const QObject *child) diff --git a/src/widgets/Notebook.hpp b/src/widgets/Notebook.hpp index 15d37bed1..178adeb65 100644 --- a/src/widgets/Notebook.hpp +++ b/src/widgets/Notebook.hpp @@ -16,6 +16,7 @@ #include #include +#include #include #include @@ -216,7 +217,7 @@ private: void resizeAddButton(); bool containsPage(QWidget *page) const; - Item *findItem(QWidget *page); + std::optional findItem(QWidget *page); void pruneInvalidHistoryEntries();