diff --git a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java index b1a32bc..7a17b92 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/io/orc/OrcStruct.java @@ -435,7 +435,7 @@ public ObjectInspector getListElementObjectInspector() { @Override public Object getListElement(Object list, int i) { - if (list == null) { + if (list == null || i < 0 || i >= getListLength(list)) { return null; } return ((List) list).get(i); diff --git a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcStruct.java b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcStruct.java index 8fc0693..2e431c8 100644 --- a/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcStruct.java +++ b/ql/src/test/org/apache/hadoop/hive/ql/io/orc/TestOrcStruct.java @@ -94,6 +94,8 @@ public void testInspectorFromTypeInfo() throws Exception { inspector.getAllStructFieldRefs().get(12).getFieldObjectInspector(); assertEquals(ObjectInspector.Category.LIST, listOI.getCategory()); assertEquals(10, listOI.getListElement(list, 10)); + assertEquals(null, listOI.getListElement(list, -1)); + assertEquals(null, listOI.getListElement(list, 13)); assertEquals(13, listOI.getListLength(list)); Map map = new HashMap();