diff --git a/data-prepper-expression/build.gradle b/data-prepper-expression/build.gradle index ef620618b9..5e666a7cd5 100644 --- a/data-prepper-expression/build.gradle +++ b/data-prepper-expression/build.gradle @@ -32,6 +32,7 @@ dependencies { implementation 'org.apache.logging.log4j:log4j-core' implementation 'org.apache.logging.log4j:log4j-slf4j2-impl' implementation 'com.github.seancfoley:ipaddress:5.5.1' + implementation 'com.google.re2j:re2j:1.8' testImplementation testLibs.spring.test testImplementation libs.commons.lang3 testImplementation 'com.fasterxml.jackson.core:jackson-databind' diff --git a/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/GenericRegexMatchOperator.java b/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/GenericRegexMatchOperator.java index c2a4dbde5a..baa4a6dc1f 100644 --- a/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/GenericRegexMatchOperator.java +++ b/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/GenericRegexMatchOperator.java @@ -9,7 +9,7 @@ import org.opensearch.dataprepper.expression.antlr.DataPrepperExpressionParser; import java.util.function.BiPredicate; -import java.util.regex.PatternSyntaxException; +import com.google.re2j.PatternSyntaxException; import static com.google.common.base.Preconditions.checkArgument; diff --git a/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/OperatorConfiguration.java b/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/OperatorConfiguration.java index 81eb206d8f..f78cd06094 100644 --- a/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/OperatorConfiguration.java +++ b/data-prepper-expression/src/main/java/org/opensearch/dataprepper/expression/OperatorConfiguration.java @@ -8,6 +8,7 @@ import org.opensearch.dataprepper.expression.antlr.DataPrepperExpressionParser; import org.opensearch.dataprepper.model.event.DataType; import org.springframework.context.annotation.Bean; +import com.google.re2j.Pattern; import javax.inject.Named; import java.util.HashMap; @@ -20,7 +21,8 @@ @Named class OperatorConfiguration { - public final BiPredicate regexEquals = (x, y) -> ((String) x).matches((String) y); + + public final BiPredicate regexEquals = (x, y) -> Pattern.compile((String) y).matcher((String) x).matches(); public final BiPredicate equals = Objects::equals; public final BiPredicate inSet = (x, y) -> ((Set) y).contains(x); public final BiPredicate typeOf = (x, y) -> DataType.isSameType(x, (String)y); diff --git a/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexEqualOperatorTest.java b/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexEqualOperatorTest.java index 894eaa4638..8b3c888f01 100644 --- a/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexEqualOperatorTest.java +++ b/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexEqualOperatorTest.java @@ -6,6 +6,7 @@ package org.opensearch.dataprepper.expression; import org.antlr.v4.runtime.ParserRuleContext; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -18,6 +19,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; +import java.time.Duration; + @ExtendWith(MockitoExtension.class) class RegexEqualOperatorTest { final GenericRegexMatchOperator objectUnderTest = new OperatorConfiguration().regexEqualOperator(); @@ -50,6 +53,18 @@ void testEvalValidArgs() { assertThat(objectUnderTest.evaluate("a", "b*"), is(false)); } + @Test + void testEvalAdversarialArgs() { + Boolean result1 = Assertions.assertTimeoutPreemptively(Duration.ofMillis(1000), () -> { + return objectUnderTest.evaluate("a".repeat(256*1024) + "X", "(a+)+"); + }); + assertThat(result1, is(false)); + Boolean result2 = Assertions.assertTimeoutPreemptively(Duration.ofMillis(1000), () -> { + return objectUnderTest.evaluate("ab".repeat(128*1024) + "X", "(a|ab)*"); + }); + assertThat(result2, is(false)); + } + @Test void testEvalInValidArgLength() { assertThrows(IllegalArgumentException.class, () -> objectUnderTest.evaluate("a")); diff --git a/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexNotEqualOperatorTest.java b/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexNotEqualOperatorTest.java index 052576a6d1..ea690d8ddf 100644 --- a/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexNotEqualOperatorTest.java +++ b/data-prepper-expression/src/test/java/org/opensearch/dataprepper/expression/RegexNotEqualOperatorTest.java @@ -6,6 +6,7 @@ package org.opensearch.dataprepper.expression; import org.antlr.v4.runtime.ParserRuleContext; +import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; @@ -18,6 +19,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; +import java.time.Duration; + @ExtendWith(MockitoExtension.class) class RegexNotEqualOperatorTest { final GenericRegexMatchOperator objectUnderTest = new OperatorConfiguration().regexNotEqualOperator(); @@ -50,6 +53,18 @@ void testEvalValidArgs() { assertThat(objectUnderTest.evaluate("a", "b*"), is(true)); } + @Test + void testEvalAdversarialArgs() { + Boolean result1 = Assertions.assertTimeoutPreemptively(Duration.ofMillis(1000), () -> { + return objectUnderTest.evaluate("a".repeat(256*1024) + "X", "(a+)+"); + }); + assertThat(result1, is(true)); + Boolean result2 = Assertions.assertTimeoutPreemptively(Duration.ofMillis(1000), () -> { + return objectUnderTest.evaluate("ab".repeat(128*1024) + "X", "(a|ab)*"); + }); + assertThat(result2, is(true)); + } + @Test void testEvalInValidArgLength() { assertThrows(IllegalArgumentException.class, () -> objectUnderTest.evaluate("a")); diff --git a/data-prepper-plugins/key-value-processor/build.gradle b/data-prepper-plugins/key-value-processor/build.gradle index 3fbbc37254..2768ca088f 100644 --- a/data-prepper-plugins/key-value-processor/build.gradle +++ b/data-prepper-plugins/key-value-processor/build.gradle @@ -22,4 +22,5 @@ dependencies { implementation project(':data-prepper-api') implementation project(':data-prepper-plugins:common') implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'com.google.re2j:re2j:1.8' } \ No newline at end of file diff --git a/data-prepper-plugins/key-value-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessor.java b/data-prepper-plugins/key-value-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessor.java index c07d018f9f..b8004d12b0 100644 --- a/data-prepper-plugins/key-value-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessor.java +++ b/data-prepper-plugins/key-value-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessor.java @@ -32,9 +32,9 @@ import java.util.LinkedHashMap; import java.util.Objects; import java.util.Set; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; -import java.util.regex.Matcher; +import com.google.re2j.Pattern; +import com.google.re2j.PatternSyntaxException; +import com.google.re2j.Matcher; import java.util.Stack; import java.util.ArrayList; @@ -85,7 +85,7 @@ public KeyValueProcessor(final PluginMetrics pluginMetrics, && !keyValueProcessorConfig.getFieldSplitCharacters().isEmpty()) { throw new IllegalArgumentException("field_delimiter_regex and field_split_characters cannot both be defined."); } else if (!validateRegex(keyValueProcessorConfig.getFieldDelimiterRegex())) { - throw new PatternSyntaxException("field_delimiter_regex is not a valid regex string", keyValueProcessorConfig.getFieldDelimiterRegex(), -1); + throw new PatternSyntaxException("field_delimiter_regex is not a valid regex string", keyValueProcessorConfig.getFieldDelimiterRegex()); } fieldDelimiterPattern = Pattern.compile(keyValueProcessorConfig.getFieldDelimiterRegex()); @@ -121,7 +121,7 @@ public KeyValueProcessor(final PluginMetrics pluginMetrics, && !keyValueProcessorConfig.getValueSplitCharacters().isEmpty()) { throw new IllegalArgumentException("key_value_delimiter_regex and value_split_characters cannot both be defined."); } else if (!validateRegex(keyValueProcessorConfig.getKeyValueDelimiterRegex())) { - throw new PatternSyntaxException("key_value_delimiter_regex is not a valid regex string", keyValueProcessorConfig.getKeyValueDelimiterRegex(), -1); + throw new PatternSyntaxException("key_value_delimiter_regex is not a valid regex string", keyValueProcessorConfig.getKeyValueDelimiterRegex()); } keyValueDelimiterPattern = Pattern.compile(keyValueProcessorConfig.getKeyValueDelimiterRegex()); @@ -152,11 +152,11 @@ public KeyValueProcessor(final PluginMetrics pluginMetrics, } if (!validateRegex(keyValueProcessorConfig.getDeleteKeyRegex())) { - throw new PatternSyntaxException("delete_key_regex is not a valid regex string", keyValueProcessorConfig.getDeleteKeyRegex(), -1); + throw new PatternSyntaxException("delete_key_regex is not a valid regex string", keyValueProcessorConfig.getDeleteKeyRegex()); } if (!validateRegex(keyValueProcessorConfig.getDeleteValueRegex())) { - throw new PatternSyntaxException("delete_value_regex is not a valid regex string", keyValueProcessorConfig.getDeleteValueRegex(), -1); + throw new PatternSyntaxException("delete_value_regex is not a valid regex string", keyValueProcessorConfig.getDeleteValueRegex()); } includeKeysSet.addAll(keyValueProcessorConfig.getIncludeKeys()); diff --git a/data-prepper-plugins/key-value-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessorTests.java b/data-prepper-plugins/key-value-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessorTests.java index 5b6f3739f8..1f10c18182 100644 --- a/data-prepper-plugins/key-value-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessorTests.java +++ b/data-prepper-plugins/key-value-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/keyvalue/KeyValueProcessorTests.java @@ -32,7 +32,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.regex.PatternSyntaxException; +import com.google.re2j.PatternSyntaxException; import java.util.stream.Stream; import static org.hamcrest.CoreMatchers.equalTo; @@ -414,7 +414,7 @@ void testBadKeyValueDelimiterRegexKeyValueProcessor() { when(mockConfig.getValueSplitCharacters()).thenReturn(null); PatternSyntaxException e = assertThrows(PatternSyntaxException.class, this::createObjectUnderTest); - assertThat(e.getMessage(), CoreMatchers.startsWith("key_value_delimiter")); + assertThat(e.getMessage(), CoreMatchers.startsWith("error parsing regexp: key_value_delimiter")); } @Test @@ -423,21 +423,21 @@ void testBadFieldDelimiterRegexKeyValueProcessor() { when(mockConfig.getFieldSplitCharacters()).thenReturn(null); PatternSyntaxException e = assertThrows(PatternSyntaxException.class, this::createObjectUnderTest); - assertThat(e.getMessage(), CoreMatchers.startsWith("field_delimiter")); + assertThat(e.getMessage(), CoreMatchers.startsWith("error parsing regexp: field_delimiter")); } @Test void testBadDeleteKeyRegexKeyValueProcessor() { when(mockConfig.getDeleteKeyRegex()).thenReturn("["); PatternSyntaxException e = assertThrows(PatternSyntaxException.class, this::createObjectUnderTest); - assertThat(e.getMessage(), CoreMatchers.startsWith("delete_key_regex")); + assertThat(e.getMessage(), CoreMatchers.startsWith("error parsing regexp: delete_key_regex")); } @Test void testBadDeleteValueRegexKeyValueProcessor() { when(mockConfig.getDeleteValueRegex()).thenReturn("["); PatternSyntaxException e = assertThrows(PatternSyntaxException.class, this::createObjectUnderTest); - assertThat(e.getMessage(), CoreMatchers.startsWith("delete_value_regex")); + assertThat(e.getMessage(), CoreMatchers.startsWith("error parsing regexp: delete_value_regex")); } @Test diff --git a/data-prepper-plugins/mutate-event-processors/build.gradle b/data-prepper-plugins/mutate-event-processors/build.gradle index fc419ce02b..4f4a017b9d 100644 --- a/data-prepper-plugins/mutate-event-processors/build.gradle +++ b/data-prepper-plugins/mutate-event-processors/build.gradle @@ -22,6 +22,7 @@ dependencies { implementation project(':data-prepper-api') implementation project(':data-prepper-plugins:common') implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'com.google.re2j:re2j:1.8' testImplementation project(':data-prepper-test:test-event') testImplementation testLibs.slf4j.simple testImplementation testLibs.spring.test diff --git a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessor.java b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessor.java index bdeb87d420..93a28572ed 100644 --- a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessor.java +++ b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessor.java @@ -27,7 +27,7 @@ import java.util.Map; import java.util.Objects; import java.util.Set; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import java.util.stream.Collectors; @DataPrepperPlugin(name = "delete_entries", pluginType = Processor.class, pluginConfigurationType = DeleteEntryProcessorConfig.class) diff --git a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessorConfig.java b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessorConfig.java index a125a8554d..792ee454f2 100644 --- a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessorConfig.java +++ b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/DeleteEntryProcessorConfig.java @@ -26,8 +26,8 @@ import java.util.Collections; import java.util.List; import java.util.Set; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; +import com.google.re2j.Pattern; +import com.google.re2j.PatternSyntaxException; import java.util.stream.Collectors; @ConditionalRequired(value = { diff --git a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessor.java b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessor.java index 597221afd0..28c1b7ce02 100644 --- a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessor.java +++ b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessor.java @@ -24,7 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; @DataPrepperPlugin(name = "rename_keys", pluginType = Processor.class, pluginConfigurationType = RenameKeyProcessorConfig.class) public class RenameKeyProcessor extends AbstractProcessor, Record> { diff --git a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessorConfig.java b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessorConfig.java index 7d25bb456c..27133047e6 100644 --- a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessorConfig.java +++ b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/RenameKeyProcessorConfig.java @@ -24,7 +24,7 @@ import org.opensearch.dataprepper.model.event.EventKeyFactory; import java.util.List; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; @JsonPropertyOrder @JsonClassDescription("The rename_keys processor renames keys in an event.") diff --git a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessor.java b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessor.java index 388f523d16..3209f87116 100644 --- a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessor.java +++ b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessor.java @@ -21,7 +21,7 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; @DataPrepperPlugin(name = "select_entries", pluginType = Processor.class, pluginConfigurationType = SelectEntriesProcessorConfig.class) public class SelectEntriesProcessor extends AbstractProcessor, Record> { diff --git a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorConfig.java b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorConfig.java index d98004bc22..6439444fff 100644 --- a/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorConfig.java +++ b/data-prepper-plugins/mutate-event-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorConfig.java @@ -15,8 +15,8 @@ import org.opensearch.dataprepper.model.annotations.ExampleValues.Example; import java.util.List; -import java.util.regex.Pattern; -import java.util.regex.PatternSyntaxException; +import com.google.re2j.Pattern; +import com.google.re2j.PatternSyntaxException; import java.util.stream.Collectors; @JsonPropertyOrder diff --git a/data-prepper-plugins/mutate-event-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorTests.java b/data-prepper-plugins/mutate-event-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorTests.java index 2200bdbf0f..d258012fca 100644 --- a/data-prepper-plugins/mutate-event-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorTests.java +++ b/data-prepper-plugins/mutate-event-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutateevent/SelectEntriesProcessorTests.java @@ -22,7 +22,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.equalTo; diff --git a/data-prepper-plugins/mutate-string-processors/build.gradle b/data-prepper-plugins/mutate-string-processors/build.gradle index 061a5afb78..cb8b3dba0b 100644 --- a/data-prepper-plugins/mutate-string-processors/build.gradle +++ b/data-prepper-plugins/mutate-string-processors/build.gradle @@ -21,6 +21,7 @@ jacocoTestCoverageVerification { dependencies { implementation project(':data-prepper-api') implementation project(':data-prepper-plugins:common') + implementation 'com.google.re2j:re2j:1.8' implementation 'com.fasterxml.jackson.core:jackson-databind' testImplementation project(':data-prepper-test:test-event') } \ No newline at end of file diff --git a/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SplitStringProcessor.java b/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SplitStringProcessor.java index eacc41b151..a245af37bb 100644 --- a/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SplitStringProcessor.java +++ b/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SplitStringProcessor.java @@ -17,7 +17,7 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; @DataPrepperPlugin(name = "split_string", pluginType = Processor.class, pluginConfigurationType = SplitStringProcessorConfig.class) public class SplitStringProcessor extends AbstractStringProcessor { diff --git a/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessor.java b/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessor.java index dbfc2d07c8..f86783d033 100644 --- a/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessor.java +++ b/data-prepper-plugins/mutate-string-processors/src/main/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessor.java @@ -17,8 +17,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import com.google.re2j.Matcher; +import com.google.re2j.Pattern; /** * This processor takes in a key and changes its value by searching for a pattern and replacing the matches with a string. diff --git a/data-prepper-plugins/mutate-string-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessorTests.java b/data-prepper-plugins/mutate-string-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessorTests.java index 854eb0a72c..ad12392f06 100644 --- a/data-prepper-plugins/mutate-string-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessorTests.java +++ b/data-prepper-plugins/mutate-string-processors/src/test/java/org/opensearch/dataprepper/plugins/processor/mutatestring/SubstituteStringProcessorTests.java @@ -28,7 +28,7 @@ import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.regex.PatternSyntaxException; +import com.google.re2j.PatternSyntaxException; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; diff --git a/data-prepper-plugins/obfuscate-processor/build.gradle b/data-prepper-plugins/obfuscate-processor/build.gradle index 377a8e022c..7239fed4c7 100644 --- a/data-prepper-plugins/obfuscate-processor/build.gradle +++ b/data-prepper-plugins/obfuscate-processor/build.gradle @@ -3,6 +3,7 @@ dependencies { implementation project(':data-prepper-plugins:common') implementation 'com.fasterxml.jackson.core:jackson-core' implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'com.google.re2j:re2j:1.8' testImplementation project(':data-prepper-test:test-common') testImplementation project(':data-prepper-test:test-event') } diff --git a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/ObfuscationProcessor.java b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/ObfuscationProcessor.java index 50a05d86cb..556a869200 100644 --- a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/ObfuscationProcessor.java +++ b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/ObfuscationProcessor.java @@ -28,8 +28,8 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import com.google.re2j.Matcher; +import com.google.re2j.Pattern; @DataPrepperPlugin(name = "obfuscate", pluginType = Processor.class, pluginConfigurationType = ObfuscationProcessorConfig.class) public class ObfuscationProcessor extends AbstractProcessor, Record> { diff --git a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskAction.java b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskAction.java index 2435156b5f..73f010f6e0 100644 --- a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskAction.java +++ b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskAction.java @@ -11,7 +11,7 @@ import org.opensearch.dataprepper.model.record.Record; import java.util.List; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; @DataPrepperPlugin(name = "mask", pluginType = ObfuscationAction.class, pluginConfigurationType = MaskActionConfig.class) public class MaskAction implements ObfuscationAction { diff --git a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/ObfuscationAction.java b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/ObfuscationAction.java index 0e6b71e2aa..fbb8be759c 100644 --- a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/ObfuscationAction.java +++ b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/ObfuscationAction.java @@ -6,7 +6,7 @@ package org.opensearch.dataprepper.plugins.processor.obfuscation.action; import java.util.List; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import org.opensearch.dataprepper.model.event.Event; import org.opensearch.dataprepper.model.record.Record; diff --git a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashAction.java b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashAction.java index 28e47eae08..acf76a936b 100644 --- a/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashAction.java +++ b/data-prepper-plugins/obfuscate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashAction.java @@ -12,8 +12,8 @@ import java.util.Arrays; import java.util.Base64; import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import com.google.re2j.Matcher; +import com.google.re2j.Pattern; import org.opensearch.dataprepper.model.annotations.DataPrepperPlugin; import org.opensearch.dataprepper.model.annotations.DataPrepperPluginConstructor; diff --git a/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskActionTest.java b/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskActionTest.java index ffcb336a01..89d3c1ca27 100644 --- a/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskActionTest.java +++ b/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/MaskActionTest.java @@ -11,7 +11,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; diff --git a/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashActionTest.java b/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashActionTest.java index 8b974bed30..d48e8e0aa5 100644 --- a/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashActionTest.java +++ b/data-prepper-plugins/obfuscate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/obfuscation/action/OneWayHashActionTest.java @@ -25,7 +25,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import org.opensearch.dataprepper.event.TestEventKeyFactory; import org.opensearch.dataprepper.model.event.EventKeyFactory; diff --git a/data-prepper-plugins/split-event-processor/build.gradle b/data-prepper-plugins/split-event-processor/build.gradle index 0271acc1a3..6346055c3c 100644 --- a/data-prepper-plugins/split-event-processor/build.gradle +++ b/data-prepper-plugins/split-event-processor/build.gradle @@ -19,4 +19,5 @@ dependencies { implementation project(':data-prepper-api') implementation project(':data-prepper-plugins:common') implementation 'com.fasterxml.jackson.core:jackson-databind' + implementation 'com.google.re2j:re2j:1.8' } \ No newline at end of file diff --git a/data-prepper-plugins/split-event-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/splitevent/SplitEventProcessor.java b/data-prepper-plugins/split-event-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/splitevent/SplitEventProcessor.java index 0f0b24fbdf..c0184ea34f 100644 --- a/data-prepper-plugins/split-event-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/splitevent/SplitEventProcessor.java +++ b/data-prepper-plugins/split-event-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/splitevent/SplitEventProcessor.java @@ -23,7 +23,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.function.Function; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; @DataPrepperPlugin(name = "split_event", pluginType = Processor.class, pluginConfigurationType = SplitEventProcessorConfig.class) diff --git a/data-prepper-plugins/translate-processor/build.gradle b/data-prepper-plugins/translate-processor/build.gradle index 06a0646921..09d395a4ee 100644 --- a/data-prepper-plugins/translate-processor/build.gradle +++ b/data-prepper-plugins/translate-processor/build.gradle @@ -14,6 +14,7 @@ dependencies { implementation 'software.amazon.awssdk:s3' implementation 'software.amazon.awssdk:sts' implementation 'io.micrometer:micrometer-core' + implementation 'com.google.re2j:re2j:1.8' implementation project(path: ':data-prepper-api') implementation project(path: ':data-prepper-plugins:mutate-event-processors') testImplementation project(':data-prepper-plugins:log-generator-source') diff --git a/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/MappingsParser.java b/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/MappingsParser.java index 4807e308bf..995e94fd5e 100644 --- a/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/MappingsParser.java +++ b/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/MappingsParser.java @@ -9,7 +9,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; public class MappingsParser { private final LinkedHashMap, Object> rangeMappings = new LinkedHashMap<>(); diff --git a/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TargetsParameterConfig.java b/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TargetsParameterConfig.java index ce9cc8ec80..a0c9b09203 100644 --- a/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TargetsParameterConfig.java +++ b/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TargetsParameterConfig.java @@ -16,7 +16,7 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import java.util.stream.Stream; public class TargetsParameterConfig { diff --git a/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessor.java b/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessor.java index 7df1060654..5672bc8417 100644 --- a/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessor.java +++ b/data-prepper-plugins/translate-processor/src/main/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessor.java @@ -30,8 +30,8 @@ import java.util.Map; import java.util.Objects; import java.util.Optional; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import com.google.re2j.Matcher; +import com.google.re2j.Pattern; import java.util.stream.Collectors; import static org.opensearch.dataprepper.logging.DataPrepperMarkers.EVENT; diff --git a/data-prepper-plugins/translate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessorEnhancedTest.java b/data-prepper-plugins/translate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessorEnhancedTest.java index ba1705d054..ca2a05b959 100644 --- a/data-prepper-plugins/translate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessorEnhancedTest.java +++ b/data-prepper-plugins/translate-processor/src/test/java/org/opensearch/dataprepper/plugins/processor/translate/TranslateProcessorEnhancedTest.java @@ -24,7 +24,7 @@ import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.regex.Pattern; +import com.google.re2j.Pattern; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertEquals;