You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@impala.apache.org by kw...@apache.org on 2017/05/01 18:17:57 UTC

[2/3] incubator-impala git commit: IMPALA-5261: Heap use-after-free in HdfsSequenceTableWriter

IMPALA-5261: Heap use-after-free in HdfsSequenceTableWriter

HdfsSequenceTableWriter::ConsumeRow() function dereferenced a pointer
that pointed to a previously deallocated memory (which belonged to an
out of scope string object). This caused the ASAN build to fail.

The fix was verified by running TestTableWriters.test_seq_writer and
TestTableWriters.test_seq_writer_hive_compatibility end-to-end tests
against the ASAN build. These tests consistently crashed impalad
before the fix.

Change-Id: Id339247f892710529d8ad56dd1e98eadbf32900b
Reviewed-on: http://gerrit.cloudera.org:8080/6762
Reviewed-by: Michael Ho <kw...@cloudera.com>
Tested-by: Impala Public Jenkins


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

Branch: refs/heads/master
Commit: c1be77458be5f57b23ae70468873bfb70be5c5e8
Parents: 741421d
Author: Attila Jeges <at...@cloudera.com>
Authored: Fri Apr 28 22:54:19 2017 +0200
Committer: Impala Public Jenkins <im...@gerrit.cloudera.org>
Committed: Sat Apr 29 02:54:42 2017 +0000

----------------------------------------------------------------------
 be/src/exec/hdfs-sequence-table-writer.cc | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-impala/blob/c1be7745/be/src/exec/hdfs-sequence-table-writer.cc
----------------------------------------------------------------------
diff --git a/be/src/exec/hdfs-sequence-table-writer.cc b/be/src/exec/hdfs-sequence-table-writer.cc
index 9af7e0f..a05aa5d 100644
--- a/be/src/exec/hdfs-sequence-table-writer.cc
+++ b/be/src/exec/hdfs-sequence-table-writer.cc
@@ -284,13 +284,13 @@ inline Status HdfsSequenceTableWriter::ConsumeRow(TupleRow* row) {
 
   const uint8_t* value_bytes;
   int64_t value_length;
+  string text = row_buf_.String();
   if (compress_flag_) {
     // apply compression to row_buf_
     // the length of the buffer must be prefixed to the buffer prior to compression
     //
     // TODO this incurs copy overhead to place the length in front of the
     // buffer prior to compression. We may want to rewrite to avoid copying.
-    string text = row_buf_.String();
     row_buf_.Clear();
     // encoding as "Text" writes the length before the text
     row_buf_.WriteText(text.size(), reinterpret_cast<const uint8_t*>(&text.data()[0]));
@@ -303,8 +303,9 @@ inline Status HdfsSequenceTableWriter::ConsumeRow(TupleRow* row) {
     }
     value_bytes = tmp;
   } else {
-    value_length = row_buf_.Size();
-    value_bytes = reinterpret_cast<const uint8_t*>(row_buf_.String().data());
+    value_length = text.size();
+    DCHECK_EQ(value_length, row_buf_.Size());
+    value_bytes = reinterpret_cast<const uint8_t*>(text.data());
   }
 
   int rec_len = value_length;