diff --git a/src/Grok.Net.Tests/Patterns/grok-custom-patterns b/src/Grok.Net.Tests/Patterns/grok-custom-patterns index a4545c2..897a22e 100644 --- a/src/Grok.Net.Tests/Patterns/grok-custom-patterns +++ b/src/Grok.Net.Tests/Patterns/grok-custom-patterns @@ -1 +1,3 @@ -ZIPCODE [1-9]{1}[0-9]{2}\s{0,1}[0-9]{3} \ No newline at end of file +ZIPCODE [1-9]{1}[0-9]{2}\s{0,1}[0-9]{3} +WRONGPATTERN1 \\\\\ +WRONGPATTERN2 \\\\\ diff --git a/src/Grok.Net.Tests/UnitTests.cs b/src/Grok.Net.Tests/UnitTests.cs index 18a6088..11fe6b4 100644 --- a/src/Grok.Net.Tests/UnitTests.cs +++ b/src/Grok.Net.Tests/UnitTests.cs @@ -189,5 +189,30 @@ public void LoadCustomPatterns(string zipcode) Assert.Equal(zipcode, grokResult[0].Value); Assert.Equal(email, grokResult[1].Value); } + + [Fact] + public void LoadWrongCustomPatterns() + { + // Arrange + const string client = "192.168.1.1"; + const string duration = "1"; + + var sut = new Grok("%{WRONGPATTERN1:duration}:%{WRONGPATTERN2:client}"); + + try + { + // Act + var grokResult = sut.Parse($"{duration}:{client}"); + + // Assert (checks if regex is invalid) + Assert.Equal("", grokResult[0].Value); + Assert.Equal("", grokResult[1].Value); + } + catch + { + // Assert (checks if pattern is invalid) + Assert.Throws(() => sut.Parse($"{duration}:{client}")); + } + } } } diff --git a/src/Grok.Net/Grok.cs b/src/Grok.Net/Grok.cs index ede9b4f..98ba8db 100644 --- a/src/Grok.Net/Grok.cs +++ b/src/Grok.Net/Grok.cs @@ -158,10 +158,23 @@ private void ProcessPatternLine(string line) } string[] strArray = line.Split(new[] { ' ' }, 2); + if (strArray.Length != 2) + { + throw new FormatException("Custom pattern was not in a correct form"); + } + if (strArray[0].Equals("#", StringComparison.OrdinalIgnoreCase)) { return; } + try + { + Regex.Match("", strArray[1]); + } + catch + { + return; + } // check before adding to avoid an exception in case the same pattern is present in the custom patterns file. if (!_patterns.ContainsKey(strArray[0]))