You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@orc.apache.org by om...@apache.org on 2019/10/22 23:15:56 UTC
[orc] 03/04: ORC-414: [C++] Check root type existence before
reading files
This is an automated email from the ASF dual-hosted git repository.
omalley pushed a commit to branch branch-1.6
in repository https://gitbox.apache.org/repos/asf/orc.git
commit 0635bb34332e2abaed1fbe3673b35506463453b5
Author: stiga-huang <hu...@gmail.com>
AuthorDate: Sat Oct 19 21:51:10 2019 +0800
ORC-414: [C++] Check root type existence before reading files
Fixes #438
Signed-off-by: Owen O'Malley <om...@apache.org>
---
c++/src/Reader.cc | 3 +++
c++/test/TestType.cc | 2 ++
2 files changed, 5 insertions(+)
diff --git a/c++/src/Reader.cc b/c++/src/Reader.cc
index ad87c15..ef39a58 100644
--- a/c++/src/Reader.cc
+++ b/c++/src/Reader.cc
@@ -1014,6 +1014,9 @@ namespace orc {
void checkProtoTypeIds(const proto::Footer &footer) {
std::stringstream msg;
int maxId = footer.types_size();
+ if (maxId <= 0) {
+ throw ParseError("Footer is corrupt: no types found");
+ }
for (int i = 0; i < maxId; ++i) {
const proto::Type& type = footer.types(i);
for (int j = 0; j < type.subtypes_size(); ++j) {
diff --git a/c++/test/TestType.cc b/c++/test/TestType.cc
index 4abfaf1..5d61f6f 100644
--- a/c++/test/TestType.cc
+++ b/c++/test/TestType.cc
@@ -355,6 +355,8 @@ namespace orc {
TEST(TestType, testCheckProtoTypeIds) {
proto::Footer footer;
proto::Type rootType;
+ expectParseError(footer, "Footer is corrupt: no types found");
+
rootType.set_kind(proto::Type_Kind_STRUCT);
rootType.add_subtypes(1); // add a non existent type id
*(footer.add_types()) = rootType;