Merge branch '0.23.0' into master
diff --git a/CHANGES.md b/CHANGES.md
index cc89059..8e6721c 100644
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,100 @@
# Apache Thrift Changelog
+## 0.23.0
+
+### Build Process
+
+- [THRIFT-5877](https://issues.apache.org/jira/browse/THRIFT-5877) - Add cpp cross tests
+- [THRIFT-5866](https://issues.apache.org/jira/browse/THRIFT-5866) - Dockerfile to support Ubuntu 24.04 LTS (Noble Numbat)
+- [THRIFT-5909](https://issues.apache.org/jira/browse/THRIFT-5909) - add Ruby in GitHub workflow
+- [THRIFT-5649](https://issues.apache.org/jira/browse/THRIFT-5649) - add go in GitHub workflow / action
+
+### C glib
+
+- [THRIFT-5931](https://issues.apache.org/jira/browse/THRIFT-5931) - thrift_ssl_socket_get_ssl_error() can underflow its remaining-buffer counter and write past the stack buffer
+- [THRIFT-5871](https://issues.apache.org/jira/browse/THRIFT-5871) - Improve MAX_MESSAGE_SIZE check and friends
+
+### C++
+
+- [THRIFT-5911](https://issues.apache.org/jira/browse/THRIFT-5911) - Inconsistent UUID compilation for aliased types
+- [THRIFT-5912](https://issues.apache.org/jira/browse/THRIFT-5912) - Assertion failed: `delta > 0`, file ThreadManagerTests.h, line 162
+- [THRIFT-5880](https://issues.apache.org/jira/browse/THRIFT-5880) - C++ TSocket on an IPv6-only system fails if you use a hostname of 127.0.0.1
+- [THRIFT-3268](https://issues.apache.org/jira/browse/THRIFT-3268) - warning: token pasting of ',' and `__VA_ARGS__` is a GNU extension
+- [THRIFT-5887](https://issues.apache.org/jira/browse/THRIFT-5887) - build/cmake/ should be prepended (not appended) to CMAKE_MODULE_PATH
+- [THRIFT-5878](https://issues.apache.org/jira/browse/THRIFT-5878) - Add UUID support for THeaderProtocol and TProtocolTap
+- [THRIFT-5898](https://issues.apache.org/jira/browse/THRIFT-5898) - Unable to build Thrift as a shared library on Windows
+
+### Contributed
+
+- [THRIFT-5920](https://issues.apache.org/jira/browse/THRIFT-5920) - Remove threadsafe warnings in thrift-maven-plugin
+
+### Delphi
+
+- [THRIFT-5939](https://issues.apache.org/jira/browse/THRIFT-5939) - Replace GUID generation with stable UUID algorithm
+- [THRIFT-5876](https://issues.apache.org/jira/browse/THRIFT-5876) - Add Delphi WinHTTP client TLS1.3 support
+
+### Go
+
+- [THRIFT-5896](https://issues.apache.org/jira/browse/THRIFT-5896) - Race condition in TServerSocket.Addr() method
+
+
+### Java
+
+- [THRIFT-5925](https://issues.apache.org/jira/browse/THRIFT-5925) - UUID implementation in JAVA is not according to the Thrift Specification
+- [THRIFT-5869](https://issues.apache.org/jira/browse/THRIFT-5869) - Close the transport after TServerEventHandler deleteContext
+- [THRIFT-5863](https://issues.apache.org/jira/browse/THRIFT-5863) - Make TServerTransport able to customize the max message size
+- [THRIFT-5774](https://issues.apache.org/jira/browse/THRIFT-5774) - Add remote client's IP address to ServerContext in TServerEventHandler
+- [THRIFT-4280](https://issues.apache.org/jira/browse/THRIFT-4280) - Add async nonblocking ssl support in java client
+- [THRIFT-5879](https://issues.apache.org/jira/browse/THRIFT-5879) - java and kotlin cross tests fail in the GitHub action
+
+### netstd
+
+- [THRIFT-5902](https://issues.apache.org/jira/browse/THRIFT-5902) - Add net10 support
+- [THRIFT-5874](https://issues.apache.org/jira/browse/THRIFT-5874) - Introduce new type `MESSAGE_SIZE_LIMIT` in TTransportException
+
+### nodejs
+
+- [THRIFT-5937](https://issues.apache.org/jira/browse/THRIFT-5937) - nodejs episodic generation does not handle extending services
+
+### PHP
+
+- [THRIFT-5935](https://issues.apache.org/jira/browse/THRIFT-5935) - Fix deprecated non-canonical casts for PHP 8.5 compatibility
+- [THRIFT-5921](https://issues.apache.org/jira/browse/THRIFT-5921) - Ubuntu focal fail to run composer install
+
+## Python
+
+- [THRIFT-5927](https://issues.apache.org/jira/browse/THRIFT-5927) - Cannot use reserved language keyword "None" with target language Python
+- [THRIFT-5885](https://issues.apache.org/jira/browse/THRIFT-5885) - TBinaryProtocolAccelerated incorrectly deserializes IntEnum to None
+- [THRIFT-5923](https://issues.apache.org/jira/browse/THRIFT-5923) - UUID support for Python
+- [THRIFT-5926](https://issues.apache.org/jira/browse/THRIFT-5926) - TSaslClientTransport.open() crashes with DIGEST-MD5 due to None initial response
+- [THRIFT-5915](https://issues.apache.org/jira/browse/THRIFT-5915) - Python 3.12+ is not supported due to distutils
+- [THRIFT-5892](https://issues.apache.org/jira/browse/THRIFT-5892) - PY_SSIZE_T_CLEAN error in some environments
+- [THRIFT-5873](https://issues.apache.org/jira/browse/THRIFT-5873) - mTLS broken with python THttpClient
+- [THRIFT-792](https://issues.apache.org/jira/browse/THRIFT-792) - TSocket hides underlying exceptions when open() fails
+- [THRIFT-5888](https://issues.apache.org/jira/browse/THRIFT-5888) - declare support for free-threaded CPython in extension modules
+- [THRIFT-5900](https://issues.apache.org/jira/browse/THRIFT-5900) - Thrift Cross Test broken in Github (Python 3.14)
+
+### Ruby
+
+- [THRIFT-5308](https://issues.apache.org/jira/browse/THRIFT-5308) - implement ruby seq replyÂ
+- [THRIFT-5910](https://issues.apache.org/jira/browse/THRIFT-5910) - Add UUID support in Ruby
+- [THRIFT-5906](https://issues.apache.org/jira/browse/THRIFT-5906) - Remove Fixnum references to support modern Ruby versions
+- [THRIFT-5905](https://issues.apache.org/jira/browse/THRIFT-5905) - Add base64 and logger as explicit dependencies
+- [THRIFT-5903](https://issues.apache.org/jira/browse/THRIFT-5903) - Fixnum is no longer supported since Ruby 3.2
+- [THRIFT-5687](https://issues.apache.org/jira/browse/THRIFT-5687) - Ruby gems deprecation warning: Gem::Specification#has_rdoc= is deprecated with no replacement
+- [THRIFT-4035](https://issues.apache.org/jira/browse/THRIFT-4035) - Thrift ruby runtime does not send unique sequence IDs in requests according to the unit tests
+- [THRIFT-1911](https://issues.apache.org/jira/browse/THRIFT-1911) - IOError not being caught in socket.rb
+- [THRIFT-4526](https://issues.apache.org/jira/browse/THRIFT-4526) - Implement rubocop for ruby in the sca build, once clean into every make
+- [THRIFT-5273](https://issues.apache.org/jira/browse/THRIFT-5273) - warning in ruby version >= 2.4
+- [THRIFT-5918](https://issues.apache.org/jira/browse/THRIFT-5918) - Implement header protocol support for Ruby
+
+### Rust
+
+- [THRIFT-5559](https://issues.apache.org/jira/browse/THRIFT-5559) - Processor can be implemented on handler trait itself
+- [THRIFT-5928](https://issues.apache.org/jira/browse/THRIFT-5928) - skip() call on unknown binary field fails deserialization instead of graceful skipping over field
+- [THRIFT-5739](https://issues.apache.org/jira/browse/THRIFT-5739) - set_nodelay should be enabled for TTcpChannel
+
+
## 0.22.0
### Build Process
diff --git a/Makefile.am b/Makefile.am
index 735cd40..733c07e 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -151,10 +151,12 @@
.github/workflows/release_rust.yml \
.travis.yml \
ApacheThrift.nuspec \
+ AGENTS.md \
appveyor.yml \
bootstrap.sh \
bower.json \
build \
+ CLAUDE.md \
CHANGES.md \
CMakeLists.txt \
composer.json \
@@ -165,6 +167,7 @@
doc \
dub.json \
eslint.config.mjs \
+ FUZZING.md \
go.mod \
jitpack.yml \
LANGUAGES.md \
diff --git a/compiler/cpp/Makefile.am b/compiler/cpp/Makefile.am
index 29ef1bd..bd0571f 100644
--- a/compiler/cpp/Makefile.am
+++ b/compiler/cpp/Makefile.am
@@ -41,6 +41,7 @@
src/thrift/generate/t_generator_registry.h \
src/thrift/generate/t_html_generator.h \
src/thrift/generate/t_oop_generator.h \
+ src/thrift/generate/sha256.h\
src/thrift/globals.h \
src/thrift/logging.h \
src/thrift/main.cc \
diff --git a/debian/changelog b/debian/changelog
index 9b66cad..ffb9568 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+thrift (0.23.0) stable; urgency=low
+
+ * update to 0.23.0
+
+ -- Apache Thrift Developers <dev@thrift.apache.org> Wed, 08 Apr 2026 00:10:00 +0100
+
thrift (0.22.0) stable; urgency=low
* update to 0.22.0
diff --git a/doap.rdf b/doap.rdf
index 88f445d..0edd9c5 100644
--- a/doap.rdf
+++ b/doap.rdf
@@ -57,6 +57,11 @@
<release rdf:parseType="Collection">
<Version>
<name>Apache Thrift</name>
+ <created>2025-04-08</created>
+ <revision>0.23.0</revision>
+ </Version>
+ <Version>
+ <name>Apache Thrift</name>
<created>2025-05-14</created>
<revision>0.22.0</revision>
</Version>
diff --git a/lib/c_glib/test/fuzz/Makefile.am b/lib/c_glib/test/fuzz/Makefile.am
index e7d0e35..c000754 100644
--- a/lib/c_glib/test/fuzz/Makefile.am
+++ b/lib/c_glib/test/fuzz/Makefile.am
@@ -19,10 +19,6 @@
AUTOMAKE_OPTIONS = subdir-objects serial-tests nostdinc
-BUILT_SOURCES = \
- gen-c_glib/fuzz_test_no_uuid_types.h \
- gen-c_glib/fuzz_test_no_uuid_types.c
-
noinst_LTLIBRARIES = libtestgencfuzz.la
nodist_libtestgencfuzz_la_SOURCES = \
gen-c_glib/fuzz_test_no_uuid_types.c \
@@ -60,6 +56,10 @@
gen-c_glib/fuzz_test_no_uuid_types.c gen-c_glib/fuzz_test_no_uuid_types.h: $(top_srcdir)/test/v0.16/FuzzTestNoUuid.thrift
$(THRIFT) --gen c_glib -r $<
+# Ensure generated headers exist before compiling sources that include them
+fuzz_parse_compact.$(OBJEXT): gen-c_glib/fuzz_test_no_uuid_types.h
+fuzz_parse_binary.$(OBJEXT): gen-c_glib/fuzz_test_no_uuid_types.h
+
clean-local:
$(RM) -r gen-c_glib/
$(RM) *.o
diff --git a/lib/cpp/test/fuzz/Makefile.am b/lib/cpp/test/fuzz/Makefile.am
index 940484d..a4fc1b9 100644
--- a/lib/cpp/test/fuzz/Makefile.am
+++ b/lib/cpp/test/fuzz/Makefile.am
@@ -19,9 +19,6 @@
AUTOMAKE_OPTIONS = subdir-objects serial-tests nostdinc
-# Generate FuzzTest code
-BUILT_SOURCES = gen-cpp/FuzzTest_types.h
-
noinst_LTLIBRARIES = libfuzztest_gen.la
nodist_libfuzztest_gen_la_SOURCES = \
@@ -84,6 +81,14 @@
gen-cpp/FuzzTest_types.cpp gen-cpp/FuzzTest_types.h: $(top_srcdir)/test/FuzzTest.thrift
$(THRIFT) --gen cpp $<
+# Ensure generated headers exist before compiling sources that include them
+FuzzParseCompact.$(OBJEXT): gen-cpp/FuzzTest_types.h
+FuzzParseBinary.$(OBJEXT): gen-cpp/FuzzTest_types.h
+FuzzRoundtripCompact.$(OBJEXT): gen-cpp/FuzzTest_types.h
+FuzzRoundtripBinary.$(OBJEXT): gen-cpp/FuzzTest_types.h
+FuzzParseJson.$(OBJEXT): gen-cpp/FuzzTest_types.h
+FuzzRoundtripJson.$(OBJEXT): gen-cpp/FuzzTest_types.h
+
# Clean target
clean-local:
$(RM) -rf gen-cpp
diff --git a/lib/py/Makefile.am b/lib/py/Makefile.am
index 0abd349..81170e2 100644
--- a/lib/py/Makefile.am
+++ b/lib/py/Makefile.am
@@ -81,6 +81,8 @@
compat \
setup.py \
setup.cfg \
+ pyproject.toml \
src \
test \
README.md
+
\ No newline at end of file
diff --git a/lib/rb/Makefile.am b/lib/rb/Makefile.am
index fd5218f..64ff7b1 100644
--- a/lib/rb/Makefile.am
+++ b/lib/rb/Makefile.am
@@ -52,9 +52,13 @@
$(MAKE) $(AM_MAKEFLAGS) distdir-am
EXTRA_DIST = \
+ .rubocop.yml \
coding_standards.md \
Rakefile \
Gemfile \
+ Gemfile.linters \
+ Gemfile.lock \
+ test/fuzz/.gitignore \
thrift.gemspec \
lib \
ext \
diff --git a/lib/rs/Makefile.am b/lib/rs/Makefile.am
index 307f842..71e6335 100644
--- a/lib/rs/Makefile.am
+++ b/lib/rs/Makefile.am
@@ -53,6 +53,7 @@
Cargo.toml \
README.md \
release.sh \
+ test/fuzz/.gitignore \
NOTICE \
LICENSE \
RELEASING.md
diff --git a/test/Makefile.am b/test/Makefile.am
index c53d3b1..bee3a6d 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -130,6 +130,7 @@
cpp \
crossrunner \
dart \
+ delphi \
erl \
keys \
lua \
@@ -147,9 +148,7 @@
AnnotationTest.thrift \
BrokenConstants.thrift \
ConstantsDemo.thrift \
- v0.16/ConstantsDemo.thrift \
DebugProtoTest.thrift \
- v0.16/DebugProtoTest.thrift \
DenseLinkingTest.thrift \
DocTest.thrift \
DoubleConstantsTest.thrift \
@@ -157,36 +156,40 @@
EnumTest.thrift \
ExceptionStruct.thrift \
FullCamelTest.thrift \
- Include.thrift \
+ FuzzTest.thrift \
Identifiers.thrift \
+ Include.thrift \
+ index.html \
Int64Test.thrift \
JsDeepConstructorTest.thrift \
+ keys/keygen/.gitignore \
+ known_failures_Linux.json \
ManyOptionals.thrift \
ManyTypedefs.thrift \
NameConflictTest.thrift \
- v0.16/NameConflictTest.thrift \
OptionalRequiredTest.thrift \
+ partial/thrift_test_schema.thrift \
+ README.md \
+ rebuild_known_failures.sh \
Recursive.thrift \
+ result.js \
ReuseObjects.thrift \
+ Service.thrift \
SmallTest.thrift \
+ SpecificNameTest.thrift \
StressTest.thrift \
+ test.py \
+ tests.json \
ThriftTest.thrift \
- v0.16/ThriftTest.thrift \
TypedefTest.thrift \
Types.thrift \
UnsafeTypes.thrift \
- Service.thrift \
- SpecificNameTest.thrift \
+ v0.16/ConstantsDemo.thrift \
+ v0.16/DebugProtoTest.thrift \
+ v0.16/FuzzTestNoUuid.thrift \
+ v0.16/NameConflictTest.thrift \
+ v0.16/ThriftTest.thrift \
VoidMethExceptionsTest.thrift \
- partial/thrift_test_schema.thrift \
- keys/keygen/.gitignore \
- known_failures_Linux.json \
- test.py \
- tests.json \
- rebuild_known_failures.sh \
- result.js \
- index.html \
- README.md \
valgrind.suppress
precross-%: