SAMZA-2523: Update Util#envVarEscape to escape more characters (#1359)
Symptom: Job to fail to launch.
Cause: Backslash and grave accent in submission config is not properly escaped, causing launch.sh to break.
Changes: Update Util#envVarEscape to escape backslash as well as grave accent.
Tests: Unit tests updated to test such cases.
API Changes: None
Upgrade Instructions: None
Usage Instructions: None
Co-authored-by: Ke Wu <kwu@linkedin.com>
diff --git a/samza-core/src/main/java/org/apache/samza/util/Util.java b/samza-core/src/main/java/org/apache/samza/util/Util.java
index 875b6da..4b97014 100644
--- a/samza-core/src/main/java/org/apache/samza/util/Util.java
+++ b/samza-core/src/main/java/org/apache/samza/util/Util.java
@@ -45,7 +45,11 @@
* Make an environment variable string safe to pass.
*/
public static String envVarEscape(String str) {
- return str.replace("\"", "\\\"").replace("'", "\\'");
+ return str
+ .replace("\\", "\\\\")
+ .replace("\"", "\\\"")
+ .replace("'", "\\'")
+ .replace("`", "\\`");
}
public static String getSamzaVersion() {
diff --git a/samza-core/src/test/java/org/apache/samza/util/TestUtil.java b/samza-core/src/test/java/org/apache/samza/util/TestUtil.java
index 2eb2e89..fe38991 100644
--- a/samza-core/src/test/java/org/apache/samza/util/TestUtil.java
+++ b/samza-core/src/test/java/org/apache/samza/util/TestUtil.java
@@ -50,8 +50,8 @@
String noSpecialCharacters = "hello world 123 .?!";
assertEquals(noSpecialCharacters, Util.envVarEscape(noSpecialCharacters));
- String withSpecialCharacters = "quotation \" apostrophe '";
- String escaped = "quotation \\\" apostrophe \\'";
+ String withSpecialCharacters = "quotation \" apostrophe ' backslash \\ grave accent `";
+ String escaped = "quotation \\\" apostrophe \\' backslash \\\\ grave accent \\`";
assertEquals(escaped, Util.envVarEscape(withSpecialCharacters));
}