From 795b0813cc054b819fcb6d304d684231b3f288fd Mon Sep 17 00:00:00 2001 From: Ty Date: Wed, 5 Feb 2025 19:22:51 -0500 Subject: [PATCH] Debugger: Only validate memory search value when needed --- pcsx2-qt/Debugger/MemorySearchWidget.cpp | 106 ++++++++++++++--------- pcsx2-qt/Debugger/MemorySearchWidget.h | 1 + 2 files changed, 64 insertions(+), 43 deletions(-) diff --git a/pcsx2-qt/Debugger/MemorySearchWidget.cpp b/pcsx2-qt/Debugger/MemorySearchWidget.cpp index f62442b69b..5cdc9218f8 100644 --- a/pcsx2-qt/Debugger/MemorySearchWidget.cpp +++ b/pcsx2-qt/Debugger/MemorySearchWidget.cpp @@ -512,56 +512,59 @@ void MemorySearchWidget::onSearchButtonClicked() if(searchComparison != SearchComparison::UnknownValue) { - switch (searchType) + if(doesSearchComparisonTakeInput(searchComparison)) { - case SearchType::ByteType: - case SearchType::Int16Type: - case SearchType::Int32Type: - case SearchType::Int64Type: - value = searchValue.toULongLong(&ok, searchHex ? 16 : 10); - break; - case SearchType::FloatType: - case SearchType::DoubleType: - searchValue.toDouble(&ok); - break; - case SearchType::StringType: - ok = !searchValue.isEmpty(); - break; - case SearchType::ArrayType: - ok = !searchValue.trimmed().isEmpty(); - break; - } - - if (!ok) - { - QMessageBox::critical(this, tr("Debugger"), tr("Invalid search value")); - return; - } - - switch (searchType) - { - case SearchType::ArrayType: - case SearchType::StringType: - case SearchType::DoubleType: - case SearchType::FloatType: - break; - case SearchType::Int64Type: - if (value <= std::numeric_limits::max()) + switch (searchType) + { + case SearchType::ByteType: + case SearchType::Int16Type: + case SearchType::Int32Type: + case SearchType::Int64Type: + value = searchValue.toULongLong(&ok, searchHex ? 16 : 10); break; - case SearchType::Int32Type: - if (value <= std::numeric_limits::max()) + case SearchType::FloatType: + case SearchType::DoubleType: + searchValue.toDouble(&ok); break; - case SearchType::Int16Type: - if (value <= std::numeric_limits::max()) + case SearchType::StringType: + ok = !searchValue.isEmpty(); break; - case SearchType::ByteType: - if (value <= std::numeric_limits::max()) + case SearchType::ArrayType: + ok = !searchValue.trimmed().isEmpty(); break; - default: - QMessageBox::critical(this, tr("Debugger"), tr("Value is larger than type")); + } + + if (!ok) + { + QMessageBox::critical(this, tr("Debugger"), tr("Invalid search value")); return; + } + + switch (searchType) + { + case SearchType::ArrayType: + case SearchType::StringType: + case SearchType::DoubleType: + case SearchType::FloatType: + break; + case SearchType::Int64Type: + if (value <= std::numeric_limits::max()) + break; + case SearchType::Int32Type: + if (value <= std::numeric_limits::max()) + break; + case SearchType::Int16Type: + if (value <= std::numeric_limits::max()) + break; + case SearchType::ByteType: + if (value <= std::numeric_limits::max()) + break; + default: + QMessageBox::critical(this, tr("Debugger"), tr("Value is larger than type")); + return; + } } - + if (!isFilterSearch && (searchComparison == SearchComparison::Changed || searchComparison == SearchComparison::ChangedBy || searchComparison == SearchComparison::Decreased || searchComparison == SearchComparison::DecreasedBy || searchComparison == SearchComparison::Increased || searchComparison == SearchComparison::IncreasedBy @@ -644,6 +647,23 @@ SearchComparison MemorySearchWidget::getCurrentSearchComparison() return m_searchComparisonLabelMap.labelToEnum(m_ui.cmbSearchComparison->currentText()); } +bool MemorySearchWidget::doesSearchComparisonTakeInput(const SearchComparison comparison) +{ + switch (comparison) { + case SearchComparison::Equals: + case SearchComparison::NotEquals: + case SearchComparison::GreaterThan: + case SearchComparison::GreaterThanOrEqual: + case SearchComparison::LessThan: + case SearchComparison::LessThanOrEqual: + case SearchComparison::IncreasedBy: + case SearchComparison::DecreasedBy: + return true; + default: + return false; + } +} + void MemorySearchWidget::onSearchTypeChanged(int newIndex) { if (newIndex < 4) diff --git a/pcsx2-qt/Debugger/MemorySearchWidget.h b/pcsx2-qt/Debugger/MemorySearchWidget.h index e29dd9034e..50f44e3286 100644 --- a/pcsx2-qt/Debugger/MemorySearchWidget.h +++ b/pcsx2-qt/Debugger/MemorySearchWidget.h @@ -149,4 +149,5 @@ private: std::vector getValidSearchComparisonsForState(SearchType type, std::vector &existingResults); SearchType getCurrentSearchType(); SearchComparison getCurrentSearchComparison(); + bool doesSearchComparisonTakeInput(SearchComparison comparison); };