You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by ma...@apache.org on 2023/11/06 00:25:47 UTC
(nifi) branch support/nifi-1.x updated: NIFI-12305 Optimized Regular Expression patterns
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 <ex...@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 <ma...@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;