From 12575289e95db19649ca279de82dd1c94b377361 Mon Sep 17 00:00:00 2001 From: Skotomogilnik Date: Sat, 11 Jul 2026 08:33:59 +0300 Subject: [PATCH 1/3] =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B1=D0=B0=D0=B3=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1) core/file/FileDataBuffer.cpp Проблема: loadData использовала qHash(data 0) для вычисления оригинального хэша, а computeCurrentHashLocked использовала QCryptographicHash Sha256. Это приводило к несовпадению хешей и isModified всегда возвращал true Изменение: Заменён qHash на QCryptographicHash Sha256 2) core/modules/ModuleManager.h Проблема: Метод registerModule был объявлен как const но изменял статическое хранилище через getStorage Изменение: Удалён const из объявления метода 3) widgets/filetreepanel.cpp Проблема: В методе remove индекс из getSourceIndex использовался без проверки валидности. Если индекс не m_fileModel remove получает некорректные данные Изменение: Добавил проверка --- src/Modules/Tabs/Disassembler/disassemblertab.cpp | 2 +- src/app/IDEWindow/idewindow.cpp | 2 +- src/core/file/FileDataBuffer.cpp | 5 ++++- src/core/modules/ModuleManager.h | 2 +- src/widgets/filetreepanel.cpp | 7 +++++-- 5 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/Modules/Tabs/Disassembler/disassemblertab.cpp b/src/Modules/Tabs/Disassembler/disassemblertab.cpp index dd057c3a..9447a15e 100644 --- a/src/Modules/Tabs/Disassembler/disassemblertab.cpp +++ b/src/Modules/Tabs/Disassembler/disassemblertab.cpp @@ -1034,7 +1034,7 @@ void DisassemblerTab::setFunctionsList(const QVector &funcs) for (const auto &f : sorted) { auto *it = new QListWidgetItem(QString("%1 %2").arg(f.address, f.name), m_funcList); - it->setData(Qt::UserRole, f.address); + it->setData(Qt::UserRole, f.address); } } diff --git a/src/app/IDEWindow/idewindow.cpp b/src/app/IDEWindow/idewindow.cpp index 92cdc1dc..27e2ed6f 100644 --- a/src/app/IDEWindow/idewindow.cpp +++ b/src/app/IDEWindow/idewindow.cpp @@ -18,7 +18,7 @@ IDEWindow::IDEWindow(const QString &ProjectPath, QWidget *parent) // - - Menu Bar - - auto const menu = menuBar(); - MenuBarBuilder const *menuBarBuilder = new MenuBarBuilder(menu, this); + MenuBarBuilder menuBarBuilder(menu, this); menu->setNativeMenuBar(false); // - - Widgets - - diff --git a/src/core/file/FileDataBuffer.cpp b/src/core/file/FileDataBuffer.cpp index 5acfa249..f7ca2e04 100644 --- a/src/core/file/FileDataBuffer.cpp +++ b/src/core/file/FileDataBuffer.cpp @@ -79,7 +79,10 @@ void FileDataBuffer::loadData(const QByteArray& data) resetOverlayLocked(); m_undoStack.clear(); m_redoStack.clear(); - m_originalHash = qHash(data, 0); + QCryptographicHash hash(QCryptographicHash::Sha256); + hash.addData(data); + m_originalHash = 0; + memcpy(&m_originalHash, hash.result().constData(), qMin(sizeof(m_originalHash), hash.result().size())); locker.unlock(); emit dataChanged(); } diff --git a/src/core/modules/ModuleManager.h b/src/core/modules/ModuleManager.h index 34f9f159..2c2816dc 100644 --- a/src/core/modules/ModuleManager.h +++ b/src/core/modules/ModuleManager.h @@ -22,7 +22,7 @@ class ModuleManager { static ModuleManager& instance(); template - void registerModule(std::function name, const QString &group, std::function creator, int position = 0) const { + void registerModule(std::function name, const QString &group, std::function creator, int position = 0) { ModuleDescription desc{ std::move(creator), std::move(name), diff --git a/src/widgets/filetreepanel.cpp b/src/widgets/filetreepanel.cpp index 0e863c31..6186e8ee 100644 --- a/src/widgets/filetreepanel.cpp +++ b/src/widgets/filetreepanel.cpp @@ -111,7 +111,10 @@ void FileTreePanel::open() { } void FileTreePanel::remove() const { - const QString body = tr("Are you sure you want to delete the file \"%1\"?").arg(m_fileModel->fileName(getSourceIndex())); + const QModelIndex srcIdx = getSourceIndex(); + if (!srcIdx.isValid()) return; + + const QString body = tr("Are you sure you want to delete the file \"%1\"?").arg(m_fileModel->fileName(srcIdx)); QMessageBox confirmRemove(QMessageBox::Question, tr("Delete"), body, QMessageBox::NoButton); [[maybe_unused]] const auto yes = confirmRemove.addButton(tr("Yes"), QMessageBox::YesRole); @@ -121,7 +124,7 @@ void FileTreePanel::remove() const { const auto reply = confirmRemove.clickedButton(); if (reply == no) return; - m_fileModel->remove(getSourceIndex()); + m_fileModel->remove(srcIdx); } QModelIndex FileTreePanel::getSourceIndex() const{ From 58dac931da9c687b52afb3009830317d0a81c2d0 Mon Sep 17 00:00:00 2001 From: Skotomogilnik Date: Mon, 13 Jul 2026 01:09:46 +0300 Subject: [PATCH 2/3] Update FileDataBuffer.cpp --- src/core/file/FileDataBuffer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/file/FileDataBuffer.cpp b/src/core/file/FileDataBuffer.cpp index f7ca2e04..95fceab6 100644 --- a/src/core/file/FileDataBuffer.cpp +++ b/src/core/file/FileDataBuffer.cpp @@ -82,7 +82,7 @@ void FileDataBuffer::loadData(const QByteArray& data) QCryptographicHash hash(QCryptographicHash::Sha256); hash.addData(data); m_originalHash = 0; - memcpy(&m_originalHash, hash.result().constData(), qMin(sizeof(m_originalHash), hash.result().size())); + memcpy(&m_originalHash, hash.result().constData(), qMin(static_cast(sizeof(m_originalHash)), hash.result().size())); locker.unlock(); emit dataChanged(); } From 6f69720894b92b35a33c835ae2702289e32175bd Mon Sep 17 00:00:00 2001 From: Skotomogilnik Date: Mon, 13 Jul 2026 01:29:38 +0300 Subject: [PATCH 3/3] =?UTF-8?q?=D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80?= =?UTF-8?q?=D0=B5=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BF=D0=B8=D0=BB=D1=8F=D1=82=D0=BE=D1=80=D0=B0=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/Modules/Tabs/CodeEditor/codeeditortab.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Modules/Tabs/CodeEditor/codeeditortab.cpp b/src/Modules/Tabs/CodeEditor/codeeditortab.cpp index 89f49734..e31cd0f0 100644 --- a/src/Modules/Tabs/CodeEditor/codeeditortab.cpp +++ b/src/Modules/Tabs/CodeEditor/codeeditortab.cpp @@ -112,7 +112,7 @@ CodeEditorTab::CodeEditorTab(QWidget* parent) connect(m_replaceButton, &QPushButton::clicked, this, &CodeEditorTab::replaceCurrent); connect(m_replaceAllButton, &QPushButton::clicked, this, &CodeEditorTab::replaceAll); connect(m_searchCloseButton, &QPushButton::clicked, this, &CodeEditorTab::closeSearchBar); - connect(m_matchCaseCheckBox, &QCheckBox::stateChanged, this, [this](int) { + connect(m_matchCaseCheckBox, &QCheckBox::checkStateChanged, this, [this](Qt::CheckState) { updateSearchUi(); });