This is an automated email from the ASF dual-hosted git repository. arina pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/drill.git
commit a1986a3fec1634812712e47be0be2565b303ea2d Author: Jean-Claude <jcc...@gmail.com> AuthorDate: Wed Feb 20 23:52:16 2019 -0500 DRILL-7045 UDF string_binary java.lang.IndexOutOfBoundsException UDF string_binary was not reallocating the drillbuffer so it would fill up and throw and out of bounds exception --- .../apache/drill/exec/expr/fn/impl/StringFunctions.java | 6 +++--- .../drill/exec/vector/complex/writer/TestJsonNanInf.java | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java index 6353e55..70db585 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/impl/StringFunctions.java @@ -1662,12 +1662,12 @@ public class StringFunctions{ @Override public void eval() { byte[] buf = org.apache.drill.common.util.DrillStringUtils.toBinaryString(in.buffer, in.start, in.end).getBytes(charset); - buffer.setBytes(0, buf); - buffer.setIndex(0, buf.length); + out.buffer = buffer.reallocIfNeeded(buf.length); + out.buffer.setBytes(0, buf); + out.buffer.setIndex(0, buf.length); out.start = 0; out.end = buf.length; - out.buffer = buffer; } } diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonNanInf.java b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonNanInf.java index 138d9b2..851ce0e 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonNanInf.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestJsonNanInf.java @@ -237,6 +237,22 @@ public class TestJsonNanInf extends BaseTestQuery { @Test + public void testLargeStringBinary() throws Exception { + String chunk = "0123456789"; + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < 1000; i++) { + builder.append(chunk); + } + String data = builder.toString(); + String query = String.format("select string_binary(binary_string('%s')) from (values(1))", data); + List<QueryDataBatch> results = testSqlWithResults(query); + RecordBatchLoader batchLoader = new RecordBatchLoader(getAllocator()); + QueryDataBatch batch = results.get(0); + batch.release(); + batchLoader.clear(); + } + + @Test public void testConvertToJsonFunction() throws Exception { String table = "nan_test.csv"; File file = new File(dirTestWatcher.getRootDir(), table);