commit 2b16665838c8afeaa0f065cafc747438de35876b
Author: Volker Krause
Date: Sat Oct 8 13:31:51 2016 +0200

Implement dynamic DetectChar rules

Needed for Perl highlighting.

diff --git a/src/lib/rule.cpp b/src/lib/rule.cpp
index f588985..c4c3b92 100644
--- a/src/lib/rule.cpp

+++ b/src/lib/rule.cpp

@@ -308,12 +308,22 @@ bool DetectChar::doLoad(QXmlStreamReader& reader)

if (s.isEmpty())
return false;
m_char = s.at(0);
+ if (isDynamic()) {
+ m_captureIndex = m_char.digitValue();
+ }
return true;
}

MatchResult DetectChar::doMatch(const QString& text, int offset, const QStringList &captures)
{
- Q_UNUSED(captures); // TODO
+ if (isDynamic()) {
+ if (captures.size() <= m_captureIndex || captures.at(m_captureIndex).isEmpty())
+ return offset;
+ if (text.at(offset) == captures.at(m_captureIndex).at(0))
+ return offset + 1;
+ return offset;
+ }
+
if (text.at(offset) == m_char)
return offset + 1;
return offset;
diff --git a/src/lib/rule_p.h b/src/lib/rule_p.h
index d8862ae..d9cedbf 100644
--- a/src/lib/rule_p.h

+++ b/src/lib/rule_p.h

@@ -103,6 +103,7 @@ protected:


private:
QChar m_char;
+ int m_captureIndex;
};

class Detect2Char : public Rule