You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by pr...@apache.org on 2014/12/16 20:07:56 UTC

svn commit: r1646048 - in /hive/branches/branch-0.14/ql/src: java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java test/queries/clientpositive/orc_null_check.q test/results/clientpositive/orc_null_check.q.out

Author: prasanthj
Date: Tue Dec 16 19:07:55 2014
New Revision: 1646048

URL: http://svn.apache.org/r1646048
Log:
HIVE-9111: Potential NPE in OrcStruct for list and map types (Prasanth Jayachandran reviewed by Vikram Dixit)

Added:
    hive/branches/branch-0.14/ql/src/test/queries/clientpositive/orc_null_check.q
    hive/branches/branch-0.14/ql/src/test/results/clientpositive/orc_null_check.q.out
Modified:
    hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java

Modified: hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java?rev=1646048&r1=1646047&r2=1646048&view=diff
==============================================================================
--- hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java (original)
+++ hive/branches/branch-0.14/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java Tue Dec 16 19:07:55 2014
@@ -17,14 +17,6 @@
  */
 package org.apache.hadoop.hive.ql.io.orc;
 
-import java.io.DataInput;
-import java.io.DataOutput;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import org.apache.hadoop.hive.common.type.HiveDecimal;
 import org.apache.hadoop.hive.serde2.objectinspector.ListObjectInspector;
 import org.apache.hadoop.hive.serde2.objectinspector.MapObjectInspector;
@@ -43,6 +35,14 @@ import org.apache.hadoop.hive.serde2.typ
 import org.apache.hadoop.hive.serde2.typeinfo.UnionTypeInfo;
 import org.apache.hadoop.io.Writable;
 
+import java.io.DataInput;
+import java.io.DataOutput;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 final public class OrcStruct implements Writable {
 
   private Object[] fields;
@@ -346,17 +346,26 @@ final public class OrcStruct implements
 
     @Override
     public Object getMapValueElement(Object map, Object key) {
+      if (map == null) {
+        return null;
+      }
       return ((Map) map).get(key);
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public Map<Object, Object> getMap(Object map) {
+      if (map == null) {
+        return null;
+      }
       return (Map) map;
     }
 
     @Override
     public int getMapSize(Object map) {
+      if (map == null) {
+        return -1;
+      }
       return ((Map) map).size();
     }
 
@@ -429,17 +438,26 @@ final public class OrcStruct implements
 
     @Override
     public Object getListElement(Object list, int i) {
+      if (list == null) {
+        return null;
+      }
       return ((List) list).get(i);
     }
 
     @Override
     public int getListLength(Object list) {
+      if (list == null) {
+        return -1;
+      }
       return ((List) list).size();
     }
 
     @Override
     @SuppressWarnings("unchecked")
     public List<?> getList(Object list) {
+      if (list == null) {
+        return null;
+      }
       return (List) list;
     }
 

Added: hive/branches/branch-0.14/ql/src/test/queries/clientpositive/orc_null_check.q
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/test/queries/clientpositive/orc_null_check.q?rev=1646048&view=auto
==============================================================================
--- hive/branches/branch-0.14/ql/src/test/queries/clientpositive/orc_null_check.q (added)
+++ hive/branches/branch-0.14/ql/src/test/queries/clientpositive/orc_null_check.q Tue Dec 16 19:07:55 2014
@@ -0,0 +1,8 @@
+create table listtable(l array<string>);
+create table listtable_orc(l array<string>) stored as orc;
+
+insert overwrite table listtable select array(null) from src;
+insert overwrite table listtable_orc select * from listtable;
+
+select size(l) from listtable_orc limit 10;
+

Added: hive/branches/branch-0.14/ql/src/test/results/clientpositive/orc_null_check.q.out
URL: http://svn.apache.org/viewvc/hive/branches/branch-0.14/ql/src/test/results/clientpositive/orc_null_check.q.out?rev=1646048&view=auto
==============================================================================
--- hive/branches/branch-0.14/ql/src/test/results/clientpositive/orc_null_check.q.out (added)
+++ hive/branches/branch-0.14/ql/src/test/results/clientpositive/orc_null_check.q.out Tue Dec 16 19:07:55 2014
@@ -0,0 +1,52 @@
+PREHOOK: query: create table listtable(l array<string>)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@listtable
+POSTHOOK: query: create table listtable(l array<string>)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@listtable
+PREHOOK: query: create table listtable_orc(l array<string>) stored as orc
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@listtable_orc
+POSTHOOK: query: create table listtable_orc(l array<string>) stored as orc
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@listtable_orc
+PREHOOK: query: insert overwrite table listtable select array(null) from src
+PREHOOK: type: QUERY
+PREHOOK: Input: default@src
+PREHOOK: Output: default@listtable
+POSTHOOK: query: insert overwrite table listtable select array(null) from src
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@src
+POSTHOOK: Output: default@listtable
+POSTHOOK: Lineage: listtable.l EXPRESSION []
+PREHOOK: query: insert overwrite table listtable_orc select * from listtable
+PREHOOK: type: QUERY
+PREHOOK: Input: default@listtable
+PREHOOK: Output: default@listtable_orc
+POSTHOOK: query: insert overwrite table listtable_orc select * from listtable
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@listtable
+POSTHOOK: Output: default@listtable_orc
+POSTHOOK: Lineage: listtable_orc.l SIMPLE [(listtable)listtable.FieldSchema(name:l, type:array<string>, comment:null), ]
+PREHOOK: query: select size(l) from listtable_orc limit 10
+PREHOOK: type: QUERY
+PREHOOK: Input: default@listtable_orc
+#### A masked pattern was here ####
+POSTHOOK: query: select size(l) from listtable_orc limit 10
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@listtable_orc
+#### A masked pattern was here ####
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1
+-1