From 0660fb18036e3a5e953f267553667d0ac76e12e6 Mon Sep 17 00:00:00 2001 From: Nayana Naik Date: Tue, 13 Oct 2026 13:11:01 +0530 Subject: [PATCH] MINOR: [C++][Engine] Validate Substrait emit output_mapping indices --- cpp/src/arrow/engine/substrait/relation_internal.cc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/cpp/src/arrow/engine/substrait/relation_internal.cc b/cpp/src/arrow/engine/substrait/relation_internal.cc index d8d77fa800cd..55ca899680e9 100644 --- a/cpp/src/arrow/engine/substrait/relation_internal.cc +++ b/cpp/src/arrow/engine/substrait/relation_internal.cc @@ -85,6 +85,9 @@ Result GetEmitInfo(const RelMessage& rel, FieldVector emit_fields(emit_size); for (int i = 0; i < emit_size; i++) { int32_t map_id = emit.output_mapping(i); + if (map_id < 0 || map_id >= input_schema->num_fields()) { + return Status::Invalid("Out of bounds emit index ", map_id); + } proj_field_refs[i] = compute::field_ref(FieldRef(map_id)); emit_fields[i] = input_schema->field(map_id); } @@ -111,6 +114,9 @@ Result ProcessEmitProject( std::vector emit_proj_exprs(emit_size); for (int i = 0; i < emit_size; i++) { int32_t map_id = emit.output_mapping(i); + if (map_id < 0 || map_id >= input_schema->num_fields()) { + return Status::Invalid("Out of bounds emit index ", map_id); + } emit_fields[i] = input_schema->field(map_id); emit_proj_exprs[i] = std::move(proj_options.expressions[map_id]); }