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 e5ebebdc29 NIFI-12750 ExecuteStreamCommand incorrectly decodes std
error stream
e5ebebdc29 is described below
commit e5ebebdc294a8a1b8b7391e719c66cf45b00d464
Author: Jim Steinebrey <[email protected]>
AuthorDate: Fri Jun 21 13:04:14 2024 -0400
NIFI-12750 ExecuteStreamCommand incorrectly decodes std error stream
Signed-off-by: Matt Burgess <[email protected]>
---
.../processors/standard/ExecuteStreamCommand.java | 22 ++++++++++-----------
.../src/test/java/TestLogStdErr.java | 1 +
.../standard/TestExecuteStreamCommand.java | 2 ++
.../resources/ExecuteCommand/TestLogStdErr.jar | Bin 900 -> 995 bytes
4 files changed, 13 insertions(+), 12 deletions(-)
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteStreamCommand.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteStreamCommand.java
index 26a0d86922..d246dbf323 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteStreamCommand.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ExecuteStreamCommand.java
@@ -54,6 +54,7 @@ import org.apache.nifi.processor.io.InputStreamCallback;
import org.apache.nifi.processor.util.StandardValidators;
import org.apache.nifi.processors.standard.util.ArgumentUtils;
import
org.apache.nifi.processors.standard.util.SoftLimitBoundedByteArrayOutputStream;
+import org.apache.nifi.stream.io.LimitingInputStream;
import org.apache.nifi.stream.io.StreamUtils;
import java.io.BufferedInputStream;
@@ -64,6 +65,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.lang.ProcessBuilder.Redirect;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
@@ -506,24 +508,20 @@ public class ExecuteStreamCommand extends
AbstractProcessor {
Map<String, String> attributes = new HashMap<>();
- final StringBuilder strBldr = new StringBuilder();
- try (final InputStream is = new FileInputStream(errorOut)) {
- int c;
- while ((c = is.read()) != -1) {
- strBldr.append((char) c);
- }
- } catch (IOException e) {
- strBldr.append("Unknown...could not read Process's Std Error");
+ String stdErr = "";
+ try (final InputStream in = new BufferedInputStream(new
LimitingInputStream(new FileInputStream(errorOut), 4000))) {
+ stdErr = IOUtils.toString(in, Charset.defaultCharset());
+ } catch (final Exception e) {
+ stdErr = "Unknown...could not read Process's Std Error due to
" + e.getClass().getName() + ": " + e.getMessage();
}
- int length = Math.min(strBldr.length(), 4000);
- attributes.put("execution.error", strBldr.substring(0, length));
+ attributes.put("execution.error", stdErr);
final Relationship outputFlowFileRelationship = putToAttribute ?
ORIGINAL_RELATIONSHIP : (exitCode != 0) ? NONZERO_STATUS_RELATIONSHIP :
OUTPUT_STREAM_RELATIONSHIP;
if (exitCode == 0) {
logger.info("Transferring {} to {}", outputFlowFile,
outputFlowFileRelationship.getName());
} else {
- logger.error("Transferring {} to {}. Executable command {}
ended in an error: {}",
- outputFlowFile, outputFlowFileRelationship.getName(),
executeCommand, strBldr.toString());
+ logger.error("Transferring {} to {}. Executable command {}
returned exitCode {} and error message: {}",
+ outputFlowFile, outputFlowFileRelationship.getName(),
executeCommand, exitCode, stdErr);
}
attributes.put("execution.status", Integer.toString(exitCode));
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/TestLogStdErr.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/TestLogStdErr.java
index a6c6a371bf..4203bf20c1 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/TestLogStdErr.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/TestLogStdErr.java
@@ -24,6 +24,7 @@ public class TestLogStdErr {
public static void main(String[] args) throws IOException,
URISyntaxException {
char[] chars = new char[1024 * 1024];
Arrays.fill(chars, 'f');
+ System.arraycopy("ÄÖÜäöüß".toCharArray(), 0, chars, 0, 7);
System.err.println(new String(chars));
}
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteStreamCommand.java
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteStreamCommand.java
index 3b0d29ca86..cedcc85397 100644
---
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteStreamCommand.java
+++
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestExecuteStreamCommand.java
@@ -297,6 +297,7 @@ public class TestExecuteStreamCommand {
List<MockFlowFile> flowFiles =
controller.getFlowFilesForRelationship(ExecuteStreamCommand.OUTPUT_STREAM_RELATIONSHIP);
MockFlowFile flowFile = flowFiles.get(0);
assertEquals(0, flowFile.getSize());
+
assertTrue(flowFile.getAttribute("execution.error").contains("ÄÖÜäöüß"));
assertTrue(flowFile.getAttribute("execution.error").contains("fffffffffffffffffffffffffffffff"));
}
@@ -329,6 +330,7 @@ public class TestExecuteStreamCommand {
List<MockFlowFile> flowFiles =
controller.getFlowFilesForRelationship(ExecuteStreamCommand.OUTPUT_STREAM_RELATIONSHIP);
MockFlowFile flowFile = flowFiles.get(0);
assertEquals(0, flowFile.getSize());
+
assertTrue(flowFile.getAttribute("execution.error").contains("ÄÖÜäöüß"));
assertTrue(flowFile.getAttribute("execution.error").contains("fffffffffffffffffffffffffffffff"));
}
diff --git
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/ExecuteCommand/TestLogStdErr.jar
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/ExecuteCommand/TestLogStdErr.jar
index 321479dae4..cb202b5b47 100755
Binary files
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/ExecuteCommand/TestLogStdErr.jar
and
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/resources/ExecuteCommand/TestLogStdErr.jar
differ