Hallo zusammen,
wir haben bei uns ein paar Wortfilter im Einsatz, darunter auch einen RegEx-Filter. Diesen verwenden wir, um bei Bedarf gezielt Nachrichten mit einem bestimmten Betreff abzulehnen. Insbesondere die Möglichkeit, mit RegEx den Beginn und das Ende eines Strings zu matchen ist dabei sehr hilfreich.
Der Filter enthält Einträge wie die folgenden:
Wir hatten in der Vergangenheit auch (temporär) komplexere Filter, allerdings immer ohne Backtracking o.ä.
Nun kommt es sehr oft vor, dass bei Nachrichten im Wortfilter folgende Fehlermeldung erscheint:
Zuletzt z.B. bei einem Newsletter von Xing mit dem Betreff "IW-Studie: So würden die Bürger das Rentensystem retten"
Allein in der letzten Stunde haben wir 100 Nachrichten, bei denen der Filter in einen Timeout lief.
Wie erwähnt greift der RegEx-Wortfilter lediglich auf den Betreff, der nun in diesem Beispiel nicht sehr komplex ist und ich denke mal auch nicht als "large input" gelten sollte.
Konkrete Fragen:
Falls das hier auch mal jemand prüfen möchte, folgender Einzeiler zeigt die Anzahl der RegEx engine timeouts der letzten Stunde an:
Danke und viele Grüße,
Patrick
PS: Mir fällt gerade auf, dass bei dem Forums-Code-Makro kein PowerShell als Sprachauswahl zur Verfügung steht.
wir haben bei uns ein paar Wortfilter im Einsatz, darunter auch einen RegEx-Filter. Diesen verwenden wir, um bei Bedarf gezielt Nachrichten mit einem bestimmten Betreff abzulehnen. Insbesondere die Möglichkeit, mit RegEx den Beginn und das Ende eines Strings zu matchen ist dabei sehr hilfreich.
Der Filter enthält Einträge wie die folgenden:
Code:
^Ihre Rechnungsnummer \d{10}$
^Kredit$
Wir hatten in der Vergangenheit auch (temporär) komplexere Filter, allerdings immer ohne Backtracking o.ä.
Nun kommt es sehr oft vor, dass bei Nachrichten im Wortfilter folgende Fehlermeldung erscheint:
Code:
The RegEx engine has timed out while trying to match a pattern to an input string. This can occur for many reasons, including very large inputs or excessive backtracking caused by nested quantifiers, back-references and other factors.
at System.Text.RegularExpressions.RegexRunner.DoCheckTimeout()
at System.Text.RegularExpressions.RegexInterpreter.Go()
at System.Text.RegularExpressions.RegexRunner.Scan(Regex regex, String text, Int32 textbeg, Int32 textend, Int32 textstart, Int32 prevlen, Boolean quick, TimeSpan timeout)
at System.Text.RegularExpressions.Regex.Run(Boolean quick, Int32 prevlen, String input, Int32 beginning, Int32 length, Int32 startat)
at System.Text.RegularExpressions.MatchCollection.GetMatch(Int32 i)
at System.Text.RegularExpressions.MatchEnumerator.MoveNext()
at System.Linq.Enumerable.<CastIterator>d__97`1.MoveNext()
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at Netatwork.NoSpamProxy.Addins.Core.Filter.ExpressionEngine.CheckString(String input, IDictionary`2 matchedWords, WordMatchLocations location, CancellationToken cancellationToken)
at Netatwork.NoSpamProxy.Addins.Core.Filter.WordFilter.<ExecuteAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at Netatwork.NoSpamProxy.MailValidation.MailValidator.<ExecuteFilterAsync>d__101.MoveNext()
Zuletzt z.B. bei einem Newsletter von Xing mit dem Betreff "IW-Studie: So würden die Bürger das Rentensystem retten"
Allein in der letzten Stunde haben wir 100 Nachrichten, bei denen der Filter in einen Timeout lief.
Wie erwähnt greift der RegEx-Wortfilter lediglich auf den Betreff, der nun in diesem Beispiel nicht sehr komplex ist und ich denke mal auch nicht als "large input" gelten sollte.
Konkrete Fragen:
- Wird der Filter trotz der "Subject"-Einschränkung auch auf den Inhalt der Nachricht zumindest ausgeführt, ohne dass Treffer tatsächlich zählen?
- Werden bei diesem Timeout die anderen Wortfilter auch nicht angewandt?
Falls das hier auch mal jemand prüfen möchte, folgender Einzeiler zeigt die Anzahl der RegEx engine timeouts der letzten Stunde an:
Code:
((Get-NspMessageTrack -Age (New-TimeSpan -Hours 1) -WithFilters -Directions FromExternal).filters | Where-Object {$_.Name -eq "wordFilter" -and $_.ErrorMessage -like "*RegEx engine has timed out*"}).count
Danke und viele Grüße,
Patrick
PS: Mir fällt gerade auf, dass bei dem Forums-Code-Makro kein PowerShell als Sprachauswahl zur Verfügung steht.