This is an automated email from the ASF dual-hosted git repository. mattyb149 pushed a commit to branch support/nifi-1.x in repository https://gitbox.apache.org/repos/asf/nifi.git
The following commit(s) were added to refs/heads/support/nifi-1.x by this push: new f92e23f3e5 NIFI-12305 Optimized Regular Expression patterns f92e23f3e5 is described below commit f92e23f3e545a23131e89384b1ceaa832fa812c2 Author: exceptionfactory <exceptionfact...@apache.org> AuthorDate: Tue Oct 31 10:05:36 2023 -0500 NIFI-12305 Optimized Regular Expression patterns - Updated SampleRecord range validation to split on comma and validate individual ranges - Updated AccessPolicyEndpointMerger to restrict the set of characters matched Signed-off-by: Matt Burgess <mattyb...@apache.org> --- .../http/endpoints/AccessPolicyEndpointMerger.java | 2 +- .../endpoints/AccessPolicyEndpointMergerTest.java | 1 + .../nifi/processors/standard/SampleRecord.java | 25 ++++++++++++++++------ 3 files changed, 21 insertions(+), 7 deletions(-) diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMerger.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMerger.java index 4b2406a3c2..b27c90daa4 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMerger.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/main/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMerger.java @@ -31,7 +31,7 @@ import java.util.regex.Pattern; public class AccessPolicyEndpointMerger extends AbstractSingleEntityEndpoint<AccessPolicyEntity> implements EndpointResponseMerger { public static final Pattern ACCESS_POLICIES_URI_PATTERN = Pattern.compile("/nifi-api/policies"); public static final Pattern ACCESS_POLICY_URI_PATTERN = Pattern.compile("/nifi-api/policies/[a-f0-9\\-]{36}"); - public static final Pattern ACCESS_POLICY_LOOKUP_URI_PATTERN = Pattern.compile("/nifi-api/policies/(?:read|write)/(?:[\\w-]+?/?)+"); + public static final Pattern ACCESS_POLICY_LOOKUP_URI_PATTERN = Pattern.compile("/nifi-api/policies/(?:read|write)/[a-z0-9\\-/]+"); private final AccessPolicyEntityMerger accessPolicyEntityMerger = new AccessPolicyEntityMerger(); @Override diff --git a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMergerTest.java b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMergerTest.java index 817c58d940..b20d27e2d3 100644 --- a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMergerTest.java +++ b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-framework-cluster/src/test/java/org/apache/nifi/cluster/coordination/http/endpoints/AccessPolicyEndpointMergerTest.java @@ -36,6 +36,7 @@ public class AccessPolicyEndpointMergerTest { assertFalse(merger.canHandle(URI.create("http://localhost:8080/nifi-api/policies/Read/flow"), "GET")); assertTrue(merger.canHandle(URI.create("http://localhost:8080/nifi-api/policies/read/flow"), "GET")); assertTrue(merger.canHandle(URI.create("http://localhost:8080/nifi-api/policies/read/processors/" + UUID.randomUUID()), "GET")); + assertTrue(merger.canHandle(URI.create("http://localhost:8080/nifi-api/policies/write/processors/" + UUID.randomUUID()), "GET")); } } \ No newline at end of file diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SampleRecord.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SampleRecord.java index d5c903b5c0..ea124d4795 100644 --- a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SampleRecord.java +++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/SampleRecord.java @@ -95,8 +95,9 @@ public class SampleRecord extends AbstractProcessor { + "the value of the 'Reservoir Size' property. Note that if the value is very large it may cause memory issues as " + "the reservoir is kept in-memory."); - private final static Pattern RANGE_PATTERN = Pattern.compile("^([0-9]+)?(-)?([0-9]+)?(,([0-9]+)?-?([0-9]+)?)*?"); - private final static Pattern INTERVAL_PATTERN = Pattern.compile("([0-9]+)?(-)?([0-9]+)?(?:,|$)"); + private static final String RANGE_SEPARATOR = ","; + private static final Pattern RANGE_PATTERN = Pattern.compile("^([0-9]+)?(-)?([0-9]+)?"); + private static final Pattern INTERVAL_PATTERN = Pattern.compile("([0-9]+)?(-)?([0-9]+)?(?:,|$)"); static final PropertyDescriptor RECORD_READER_FACTORY = new PropertyDescriptor.Builder() @@ -280,14 +281,14 @@ public class SampleRecord extends AbstractProcessor { recordSetWriter.flush(); recordSetWriter.close(); } catch (final IOException ioe) { - getLogger().warn("Failed to close Writer for {}", new Object[]{outFlowFile}); + getLogger().warn("Failed to close Writer for {}", outFlowFile); } attributes.put("record.count", String.valueOf(writeResult.getRecordCount())); attributes.put(CoreAttributes.MIME_TYPE.key(), recordSetWriter.getMimeType()); attributes.putAll(writeResult.getAttributes()); } catch (Exception e) { - getLogger().error("Error during transmission of records due to {}, routing to failure", e.getMessage(), e); + getLogger().error("Error during transmission of records, routing to failure", e); session.transfer(flowFile, REL_FAILURE); session.remove(sampledFlowFile); return; @@ -347,13 +348,25 @@ public class SampleRecord extends AbstractProcessor { this.rangeExpression = rangeExpression; } + private boolean isRangeExpressionInvalid() { + boolean invalid = false; + final String[] ranges = rangeExpression.split(RANGE_SEPARATOR); + for (final String range : ranges) { + final Matcher matcher = RANGE_PATTERN.matcher(range); + if (!matcher.matches()) { + invalid = true; + break; + } + } + return invalid; + } + @Override public void init() throws IOException { currentCount = 1; ranges.clear(); writer.beginRecordSet(); - Matcher validateRangeExpression = RANGE_PATTERN.matcher(rangeExpression); - if (!validateRangeExpression.matches()) { + if (isRangeExpressionInvalid()) { throw new IOException(rangeExpression + " is not a valid range expression"); } Integer startRange, endRange;