diff options
| author | Josh Ferrell <josh@vector35.com> | 2026-01-26 14:23:12 -0500 |
|---|---|---|
| committer | Josh Ferrell <josh@vector35.com> | 2026-02-06 17:53:45 -0500 |
| commit | 70bbb18a9444824a8ec2b9a7ff57fc848e017b6e (patch) | |
| tree | fe87c0976b75a7557986d1ac6bcc2409a839624c /examples/triage/strings.cpp | |
| parent | 9b7604d13e8bd98c6998facb9326926ed96281b5 (diff) | |
Add regex and case sensitivity options to FilterEdit
Diffstat (limited to 'examples/triage/strings.cpp')
| -rw-r--r-- | examples/triage/strings.cpp | 31 |
1 files changed, 22 insertions, 9 deletions
diff --git a/examples/triage/strings.cpp b/examples/triage/strings.cpp index 32d9ff97..9ae176a0 100644 --- a/examples/triage/strings.cpp +++ b/examples/triage/strings.cpp @@ -115,16 +115,16 @@ QString GenericStringsModel::stringRefToQString(const BNStringReference& stringR BinaryNinja::DataBuffer stringBuffer = m_data->ReadBuffer(stringRef.start, stringRef.length); if (stringRef.type == BNStringType::Utf32String) - { + { char32_t* data = (char32_t*)stringBuffer.GetData(); qstr = QString::fromUcs4(data, stringRef.length / 4); - } + } else if (stringRef.type == BNStringType::Utf16String) { char16_t* data = (char16_t*)stringBuffer.GetData(); qstr = QString::fromUtf16(data, stringRef.length / 2); } - else + else { char* data = (char*)stringBuffer.GetData(); qstr = QString::fromUtf8(data, stringBuffer.GetLength()); @@ -159,7 +159,7 @@ void GenericStringsModel::performSort(int col, Qt::SortOrder order) return a.length > b.length; } else if (col == 2) - { + { QString s = stringRefToQString(a); QString s2 = stringRefToQString(b); @@ -188,18 +188,31 @@ void GenericStringsModel::applyFilter() m_entries.clear(); for (auto& entry : m_allEntries) { - auto s = stringRefToQString(entry).toStdString(); + auto s = stringRefToQString(entry); + + bool match; + if (m_filterOptions.testFlag(UseRegexOption)) + { + match = m_filterRegex.match(s).hasMatch(); + } + else + { + match = s.contains(m_filter, m_filterOptions.testFlag(CaseSensitiveOption) ? Qt::CaseSensitive : Qt::CaseInsensitive); + } - if (FilteredView::match(s, m_filter)) + if (match) m_entries.push_back(entry); } performSort(m_sortCol, m_sortOrder); } -void GenericStringsModel::setFilter(const std::string& filterText) +void GenericStringsModel::setFilter(const QString& filterText, FilterOptions options) { m_filter = filterText; + m_filterOptions = options; + bool caseSensitive = options.testFlag(CaseSensitiveOption); + m_filterRegex = QRegularExpression(filterText, caseSensitive ? QRegularExpression::NoPatternOption : QRegularExpression::CaseInsensitiveOption); beginResetModel(); applyFilter(); endResetModel(); @@ -412,9 +425,9 @@ void StringsTreeView::stringDoubleClicked(const QModelIndex& cur) } -void StringsTreeView::setFilter(const std::string& filterText) +void StringsTreeView::setFilter(const std::string& filterText, FilterOptions options) { - m_model->setFilter(filterText); + m_model->setFilter(QString::fromStdString(filterText), options); } |
