Author: rohini Date: Fri Oct 12 17:05:21 2018 New Revision: 1843692 URL: http://svn.apache.org/viewvc?rev=1843692&view=rev Log: PIG-5362: Parameter substitution of shell cmd results doesn't handle backslash (wlauer via rohini)
Modified: pig/trunk/CHANGES.txt pig/trunk/src/org/apache/pig/tools/parameters/PreprocessorContext.java pig/trunk/test/org/apache/pig/tools/parameters/TestPreprocessorContext.java Modified: pig/trunk/CHANGES.txt URL: http://svn.apache.org/viewvc/pig/trunk/CHANGES.txt?rev=1843692&r1=1843691&r2=1843692&view=diff ============================================================================== --- pig/trunk/CHANGES.txt (original) +++ pig/trunk/CHANGES.txt Fri Oct 12 17:05:21 2018 @@ -88,6 +88,8 @@ OPTIMIZATIONS BUG FIXES +PIG-5362: Parameter substitution of shell cmd results doesn't handle backslash (wlauer via rohini) + PIG-5355: Negative progress report by HBaseTableRecordReader (satishsaley via knoguchi) PIG-5341: PigStorage with -tagFile/-tagPath produces incorrect results with column pruning (knoguchi) Modified: pig/trunk/src/org/apache/pig/tools/parameters/PreprocessorContext.java URL: http://svn.apache.org/viewvc/pig/trunk/src/org/apache/pig/tools/parameters/PreprocessorContext.java?rev=1843692&r1=1843691&r2=1843692&view=diff ============================================================================== --- pig/trunk/src/org/apache/pig/tools/parameters/PreprocessorContext.java (original) +++ pig/trunk/src/org/apache/pig/tools/parameters/PreprocessorContext.java Fri Oct 12 17:05:21 2018 @@ -352,9 +352,7 @@ public class PreprocessorContext { throw new ParameterSubstitutionException(message); } val = paramval_get(key); - if (val.contains("$")) { - val = val.replaceAll("(?<!\\\\)\\$", "\\\\\\$"); - } + val = Matcher.quoteReplacement(val); replaced_line = replaced_line.replaceFirst("\\$\\{"+key+"\\}", val); } } @@ -379,9 +377,7 @@ public class PreprocessorContext { throw new ParameterSubstitutionException(message); } val = paramval_get(key); - if (val.contains("$")) { - val = val.replaceAll("(?<!\\\\)\\$", "\\\\\\$"); - } + val = Matcher.quoteReplacement(val); replaced_line = replaced_line.replaceFirst("\\$"+key, val); } } Modified: pig/trunk/test/org/apache/pig/tools/parameters/TestPreprocessorContext.java URL: http://svn.apache.org/viewvc/pig/trunk/test/org/apache/pig/tools/parameters/TestPreprocessorContext.java?rev=1843692&r1=1843691&r2=1843692&view=diff ============================================================================== --- pig/trunk/test/org/apache/pig/tools/parameters/TestPreprocessorContext.java (original) +++ pig/trunk/test/org/apache/pig/tools/parameters/TestPreprocessorContext.java Fri Oct 12 17:05:21 2018 @@ -66,4 +66,15 @@ public class TestPreprocessorContext { ); } } + + @Test + public void testEscaping() throws ParameterSubstitutionException, FrontendException { + PreprocessorContext ctx = new PreprocessorContext(0); + // quote argument to echo so that the shell doesn't treat the backslash as an escape and consume it + String cmd = "echo '$\\stuff'"; + ctx.processShellCmd("some_value", "`" + cmd + "`"); + + String subVal = ctx.substitute("$some_value"); + assertEquals("$\\stuff", subVal); + } }