Files
arrow/cpp/thirdparty
Hanayoshi-8744 c7944b35f3 GH-51354: [C++][Parquet] Update bundled Apache Thrift to 0.24.0 (#51559)
### Rationale for this change

The bundled Apache Thrift dependency (0.22.0) is affected by
CVE-2026-55969, an integer overflow vulnerability in
`TTransport::checkReadBytesAvailable()` that could bypass message
size checks when reading maliciously crafted Thrift-encoded data.
Arrow's Parquet module relies on Thrift's compact protocol to
deserialize Parquet file metadata, so this is relevant to Arrow.

### What changes are included in this PR?

- Bump the bundled Apache Thrift version from 0.22.0 to 0.24.0 in
  `cpp/thirdparty/versions.txt` (including the SHA256 checksum).
- Remove the Clang-only `thrift-3187.patch` and its application logic
  in `ThirdpartyToolchain.cmake`. This patch pre-applied Thrift's
  upstream fix for THRIFT-3268 (a compiler warning), which has since
  been merged into Thrift itself and is already included in 0.24.0.
  Keeping the patch would make `git apply`/`patch` fail during the
  bundled build with Clang.

### Are these changes tested?

- Verified that `thrift-0.24.0.tar.gz` downloads correctly and its
  SHA256 checksum matches the value published at
  downloads.apache.org.
- Confirmed the CVE fix is present in Thrift 0.24.0 by diffing
  `TProtocol.h`, `TCompactProtocol.h`, `TBinaryProtocol.h`, and
  `TTransport.h` against 0.22.0.
- Confirmed `thrift-3187.patch` no longer applies cleanly against
  0.24.0 sources (already fixed upstream), which is why it was
  removed rather than kept as a no-op.
- Built Arrow C++ locally on macOS (arm64, AppleClang) with
  `-DARROW_PARQUET=ON -DARROW_BUILD_TESTS=ON -DThrift_SOURCE=BUNDLED`,
  on top of the latest `main` (after rebasing), and ran the following
  Parquet tests. All of them passed with no failures (some tests were
  skipped, e.g. those requiring Snappy, which was not enabled in my
  build):
  `parquet-internals-test`, `parquet-file-deserialize-test`,
  `parquet-schema-test`, `parquet-reader-test`,
  `parquet-writer-test`, `parquet-arrow-reader-writer-test`,
  `parquet-arrow-metadata-test`, `parquet-arrow-index-test`, and
  `parquet-arrow-internals-test`.
- Not tested locally: the removed patch was only applied for
  `CMAKE_CXX_COMPILER_ID STREQUAL "Clang"`, which my AppleClang build
  does not hit, so building the bundled Thrift with Clang on Linux
  relies on CI. I also did not test encryption, Windows/MSVC, or the
  Python/R packaging builds locally.

### Are there any user-facing changes?

No.

* GitHub Issue: #51354

---

Disclosure: this change was prepared with the assistance of an AI
coding tool (Claude Code). I reviewed the diff, verified the CVE fix
and checksum myself, and ran the test suite locally before opening
this PR.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Authored-by: Hanayoshi-8744 <201203709+Hanayoshi-8744@users.noreply.github.com>
Signed-off-by: Sutou Kouhei <kou@clear-code.com>
2026-10-08 18:22:16 +09:00
..

Arrow C++ Thirdparty Dependencies

See the "Build Dependency Management" section in the C++ Developer Documentation.

Update versions automatically

There is a convenient script that update versions in versions.txt to the latest version automatically. You can use it like the following:

cpp/thirdparty/update.rb PRODUCT_PATTERN1 PRODUCT_PATTERN2 ...

For example, you can update AWS SDK for C++ related products' versions by the following command line:

cpp/thirdparty/update.rb "AWS*" "S2N*"