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;

Reply via email to