Repository: nifi
Updated Branches:
  refs/heads/master 07989b846 -> b96e402e7


NIFI-3768: This closes #1727. Avoid wrapping FlowFile Attributes Map in an 
UnmodifiableMap in the StandardFlowFileBuilder

Signed-off-by: joewitt <[email protected]>


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/b96e402e
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/b96e402e
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/b96e402e

Branch: refs/heads/master
Commit: b96e402e78caca0dae58b7def37992cb56ee246e
Parents: 07989b8
Author: Mark Payne <[email protected]>
Authored: Mon May 1 22:48:48 2017 -0400
Committer: joewitt <[email protected]>
Committed: Mon May 1 22:51:05 2017 -0400

----------------------------------------------------------------------
 .../nifi/controller/repository/StandardFlowFileRecord.java    | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi/blob/b96e402e/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-repository-models/src/main/java/org/apache/nifi/controller/repository/StandardFlowFileRecord.java
----------------------------------------------------------------------
diff --git 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-repository-models/src/main/java/org/apache/nifi/controller/repository/StandardFlowFileRecord.java
 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-repository-models/src/main/java/org/apache/nifi/controller/repository/StandardFlowFileRecord.java
index a1d5173..fd098eb 100644
--- 
a/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-repository-models/src/main/java/org/apache/nifi/controller/repository/StandardFlowFileRecord.java
+++ 
b/nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-repository-models/src/main/java/org/apache/nifi/controller/repository/StandardFlowFileRecord.java
@@ -319,7 +319,12 @@ public final class StandardFlowFileRecord implements 
FlowFile, FlowFileRecord {
             bLineageIdentifiers.clear();
             bPenaltyExpirationMs = specFlowFile.getPenaltyExpirationMillis();
             bSize = specFlowFile.getSize();
-            bAttributes = specFlowFile.getAttributes();
+            // If this is a StandardFlowFileRecord, access the attributes map 
directly. Do not use the
+            // getAttributes() method, because that will wrap the original in 
an UnmodifiableMap. As a result,
+            // a Processor that continually calls session.append() for 
instance will have a FlowFile whose attributes
+            // Map is wrapped thousands of times until it hits a 
StackOverflowError. We want the getter to return
+            // UnmodifiableMap, though, so that Processors cannot directly 
modify that Map.
+            bAttributes = specFlowFile instanceof StandardFlowFileRecord ? 
((StandardFlowFileRecord) specFlowFile).attributes : 
specFlowFile.getAttributes();
             bAttributesCopied = false;
             bClaim = specFlowFile.getContentClaim();
             bClaimOffset = specFlowFile.getContentClaimOffset();

Reply via email to