From 6f473bfd2c50780ef26c757f22f8ac903824d2d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Tue, 3 Mar 2026 11:46:57 +0100 Subject: [PATCH 1/5] GH-49435: [C++][FlightRPC] Check return value for new nodiscard declared functions on Protobuf --- .../arrow/flight/transport/grpc/serialization_internal.cc | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/transport/grpc/serialization_internal.cc b/cpp/src/arrow/flight/transport/grpc/serialization_internal.cc index 0b8c90a08eb8..d4848c5077d1 100644 --- a/cpp/src/arrow/flight/transport/grpc/serialization_internal.cc +++ b/cpp/src/arrow/flight/transport/grpc/serialization_internal.cc @@ -353,7 +353,10 @@ ::grpc::Status FlightDataDeserialize(ByteBuffer* buffer, // Can't use ParseFromCodedStream as this reads the entire // rest of the stream into the descriptor command field. std::string buffer; - pb_stream.ReadString(&buffer, length); + if (!pb_stream.ReadString(&buffer, length)) { + return {::grpc::StatusCode::INTERNAL, + "Unable to read FlightDescriptor from protobuf"}; + } if (!pb_descriptor.ParseFromString(buffer)) { return {::grpc::StatusCode::INTERNAL, "Unable to parse FlightDescriptor"}; } From 1888aa77952452f1db35f58f652e31228eae4ab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Tue, 3 Mar 2026 12:21:56 +0100 Subject: [PATCH 2/5] Another nodiscard from protobuf --- cpp/src/arrow/flight/sql/server.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/cpp/src/arrow/flight/sql/server.cc b/cpp/src/arrow/flight/sql/server.cc index 8471fa8a2b1e..08921ad20cc2 100644 --- a/cpp/src/arrow/flight/sql/server.cc +++ b/cpp/src/arrow/flight/sql/server.cc @@ -537,7 +537,9 @@ arrow::Result CreateStatementQueryTicket( ticket_statement_query.set_statement_handle(statement_handle); google::protobuf::Any ticket; - ticket.PackFrom(ticket_statement_query); + if (!ticket.PackFrom(ticket_statement_query)) { + return Status::Invalid("Unable to pack ticket"); + } std::string ticket_string; From 016150c060a8d1a255f714e59817341b0d2c614d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Tue, 3 Mar 2026 12:33:57 +0100 Subject: [PATCH 3/5] Specifically ignore return value for PackFrom --- cpp/src/arrow/flight/sql/server.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/flight/sql/server.cc b/cpp/src/arrow/flight/sql/server.cc index 08921ad20cc2..07a9ffbabd8a 100644 --- a/cpp/src/arrow/flight/sql/server.cc +++ b/cpp/src/arrow/flight/sql/server.cc @@ -537,9 +537,9 @@ arrow::Result CreateStatementQueryTicket( ticket_statement_query.set_statement_handle(statement_handle); google::protobuf::Any ticket; - if (!ticket.PackFrom(ticket_statement_query)) { - return Status::Invalid("Unable to pack ticket"); - } + // PackFrom returns void for older protobuf versions and [[nodiscard]] bool + // for newer versions, so we explicitly ignore the return value. + (void)ticket.PackFrom(ticket_statement_query); std::string ticket_string; From ec3b4c05a7198135d3b8da031dae92fb0a069df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Thu, 5 Mar 2026 12:03:04 +0100 Subject: [PATCH 4/5] Update ticket.PackFrom handling of return value Co-authored-by: Sutou Kouhei --- cpp/src/arrow/flight/sql/server.cc | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/cpp/src/arrow/flight/sql/server.cc b/cpp/src/arrow/flight/sql/server.cc index 07a9ffbabd8a..10dd073b6227 100644 --- a/cpp/src/arrow/flight/sql/server.cc +++ b/cpp/src/arrow/flight/sql/server.cc @@ -537,9 +537,13 @@ arrow::Result CreateStatementQueryTicket( ticket_statement_query.set_statement_handle(statement_handle); google::protobuf::Any ticket; - // PackFrom returns void for older protobuf versions and [[nodiscard]] bool - // for newer versions, so we explicitly ignore the return value. - (void)ticket.PackFrom(ticket_statement_query); +#if PROTOBUF_VERSION >= 3015000 + if (!ticket.PackFrom(ticket_statement_query)) { + return Status::IOError("Failed to pack ticket"); + } +#else + ticket.PackFrom(ticket_statement_query); +#endif std::string ticket_string; From 5e5c410da435d05bdf6f79eac87969ccb8493900 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ra=C3=BAl=20Cumplido?= Date: Thu, 5 Mar 2026 12:44:04 +0100 Subject: [PATCH 5/5] Pin protobuf@33 due to grpc/grpc#41755 issue --- cpp/Brewfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpp/Brewfile b/cpp/Brewfile index 811712516bf7..afd1bfe0a31a 100644 --- a/cpp/Brewfile +++ b/cpp/Brewfile @@ -36,7 +36,7 @@ brew "ninja" brew "node" brew "openssl" brew "pkgconf" -brew "protobuf" +brew "protobuf@33" brew "python" brew "rapidjson" brew "re2"