Skip to content

AVRO-4189: [Java] Use ClassUtils.forName() in FastReaderBuilder for consistency - #3693

Merged
iemejia merged 1 commit into
apache:mainfrom
iemejia:fix/fastreaderbuilder-use-classutils-forname
Mar 31, 2026
Merged

AVRO-4189: [Java] Use ClassUtils.forName() in FastReaderBuilder for consistency#3693
iemejia merged 1 commit into
apache:mainfrom
iemejia:fix/fastreaderbuilder-use-classutils-forname

Conversation

@iemejia

@iemejia iemejia commented Mar 19, 2026

Copy link
Copy Markdown
Member

I noticed that FastReaderBuilder.findClass() was using data.getClassLoader().loadClass() directly, bypassing ClassUtils.forName() which is used everywhere else in the codebase. This change aligns FastReaderBuilder with the standard class loading path and adds tests for class loading behavior.

What is the purpose of the change

(For example: This pull request improves file read performance by buffering data, fixing AVRO-XXXX.)

Verifying this change

(Please pick one of the following options)

This change is a trivial rework / code cleanup without any test coverage.

(or)

This change is already covered by existing tests, such as (please describe tests).

(or)

This change added tests and can be verified as follows:

(example:)

  • Extended interop tests to verify consistent valid schema names between SDKs
  • Added test that validates that Java throws an AvroRuntimeException on invalid binary data
  • Manually verified the change by building the website and checking the new redirect

Documentation

  • Does this pull request introduce a new feature? (yes / no)
  • If yes, how is the feature documented? (not applicable / docs / JavaDocs / not documented)

@github-actions github-actions Bot added the Java Pull Requests for Java binding label Mar 19, 2026

@gszadovszky gszadovszky left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks a lot for working on this, @iemejia.

return Optional.of(data.getClassLoader().loadClass(clazz));
} catch (ReflectiveOperationException e) {
return Optional.of(ClassUtils.forName(data.getClassLoader(), clazz));
} catch (ClassNotFoundException | SecurityException e) {

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm wondering if it is a good practice here to swallow the SecurityException. It will be hard to analyze why the class loading is not working while the SecurityException contains a comprehensive explanation. WDYT?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh you have a point I somehow did not remember that SecurityException was a RuntimeException. I will fix it.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done @gszadovszky PTAL again, thx

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
@iemejia
iemejia force-pushed the fix/fastreaderbuilder-use-classutils-forname branch from 87bec1b to a63fb2e Compare March 30, 2026 22:28
@iemejia
iemejia merged commit bd916d3 into apache:main Mar 31, 2026
9 checks passed
@iemejia
iemejia deleted the fix/fastreaderbuilder-use-classutils-forname branch March 31, 2026 07:52
iemejia added a commit to iemejia/avro that referenced this pull request Apr 1, 2026
…onsistency (apache#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
iemejia added a commit to iemejia/avro that referenced this pull request Apr 6, 2026
…onsistency (apache#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
RyanSkraba added a commit that referenced this pull request Apr 6, 2026
…onsistency (#3693) (#3716)

* AVRO-4189: [Java] Use ClassUtils.forName() in FastReaderBuilder for consistency (#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.

* AVRO-4171: [C++] Avoid CMake warnings (#3452)

Avoid CMake warnings when the fmt library isn't found on the system,
which is the expected default scenario when fetching from git.

* AVRO-4170: Improve sync marker error message in DataFileStream (#3446)

* [AVRO-4181] add guards around optional bits in installed CMake file (#3491)

* [C++] Use GNUInstallDirs to install to the correct folders (#3478)

* Update _index.md (#3508)

Fixing a small typo

* [doc] Update _index.md fixing minor typo

Port
https://github.com/apache/avro/pull/3508/commits/5941c27d631997afa0e23a0a11f402407a318bb5
to ++version++

* AVRO-4173: [js] Fix namespace inheritance for nested types in schema parsing (#3466)

* AVRO-4173: [JS] Fix namespace inheritance for nested types

* AVRO-4173: [JS] Refactor getOpts to prevent shared state

* Simplify registry and logicalTypes initialization

* Revert "Simplify registry and logicalTypes initialization"

This reverts commit 28fb6c0fec5077b7f0a5fc36c983fb7e1c50b18b.

---------

Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>
Co-authored-by: Martin Tzvetanov Grigorov <mgrigorov@apache.org>

* AVRO-4178: [C++] Remove HAVE_BOOST_ASIO and Boost::system (#3480)

* AVRO-4178: [C++] Remove HAVE_BOOST_ASIO and Boost::system deps

* modify the old test with workaround suggestion

* Bump io.netty:netty-bom from 4.2.4.Final to 4.2.7.Final in /lang/java (#3524)

Bumps [io.netty:netty-bom](https://github.com/netty/netty) from 4.2.4.Final to 4.2.7.Final.
- [Commits](https://github.com/netty/netty/compare/netty-4.2.4.Final...netty-4.2.7.Final)

---
updated-dependencies:
- dependency-name: io.netty:netty-bom
  dependency-version: 4.2.7.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 11.0.1 to 12.1.0 in /lang/java (#3523)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 11.0.1 to 12.1.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-11.0.1...checkstyle-12.1.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.codehaus.mojo:exec-maven-plugin in /lang/java (#3521)

Bumps [org.codehaus.mojo:exec-maven-plugin](https://github.com/mojohaus/exec-maven-plugin) from 3.5.1 to 3.6.2.
- [Release notes](https://github.com/mojohaus/exec-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/exec-maven-plugin/compare/3.5.1...3.6.2)

---
updated-dependencies:
- dependency-name: org.codehaus.mojo:exec-maven-plugin
  dependency-version: 3.6.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump archetype-plugin.version from 3.4.0 to 3.4.1 in /lang/java (#3513)

Bumps `archetype-plugin.version` from 3.4.0 to 3.4.1.

Updates `org.apache.maven.archetype:archetype-packaging` from 3.4.0 to 3.4.1
- [Release notes](https://github.com/apache/maven-archetype/releases)
- [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.4.0...maven-archetype-3.4.1)

Updates `org.apache.maven.plugins:maven-archetype-plugin` from 3.4.0 to 3.4.1
- [Release notes](https://github.com/apache/maven-archetype/releases)
- [Commits](https://github.com/apache/maven-archetype/compare/maven-archetype-3.4.0...maven-archetype-3.4.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.archetype:archetype-packaging
  dependency-version: 3.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
- dependency-name: org.apache.maven.plugins:maven-archetype-plugin
  dependency-version: 3.4.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump github/codeql-action from 3 to 4 (#3512)

Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3 to 4.
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](https://github.com/github/codeql-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump grpc.version from 1.75.0 to 1.76.0 in /lang/java (#3509)

Bumps `grpc.version` from 1.75.0 to 1.76.0.

Updates `io.grpc:grpc-core` from 1.75.0 to 1.76.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.75.0...v1.76.0)

Updates `io.grpc:grpc-stub` from 1.75.0 to 1.76.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.75.0...v1.76.0)

Updates `io.grpc:grpc-netty` from 1.75.0 to 1.76.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.75.0...v1.76.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.76.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.76.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.76.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.codehaus.mojo:extra-enforcer-rules in /lang/java (#3505)

Bumps [org.codehaus.mojo:extra-enforcer-rules](https://github.com/mojohaus/extra-enforcer-rules) from 1.10.0 to 1.11.0.
- [Release notes](https://github.com/mojohaus/extra-enforcer-rules/releases)
- [Commits](https://github.com/mojohaus/extra-enforcer-rules/compare/1.10.0...1.11.0)

---
updated-dependencies:
- dependency-name: org.codehaus.mojo:extra-enforcer-rules
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.github.luben:zstd-jni from 1.5.7-4 to 1.5.7-5 in /lang/java (#3504)

Bumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-4 to 1.5.7-5.
- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-4...v1.5.7-5)

---
updated-dependencies:
- dependency-name: com.github.luben:zstd-jni
  dependency-version: 1.5.7-5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/setup-node from 4 to 6 (#3522)

Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-compiler-plugin in /lang/java (#3499)

Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.14.0 to 3.14.1.
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.0...maven-compiler-plugin-3.14.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-version: 3.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-javadoc-plugin in /lang/java (#3494)

Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.11.3 to 3.12.0.
- [Release notes](https://github.com/apache/maven-javadoc-plugin/releases)
- [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.3...maven-javadoc-plugin-3.12.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-javadoc-plugin
  dependency-version: 3.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-shade-plugin in /lang/java (#3488)

Bumps [org.apache.maven.plugins:maven-shade-plugin](https://github.com/apache/maven-shade-plugin) from 3.6.0 to 3.6.1.
- [Release notes](https://github.com/apache/maven-shade-plugin/releases)
- [Commits](https://github.com/apache/maven-shade-plugin/compare/maven-shade-plugin-3.6.0...v3.6.1)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-shade-plugin
  dependency-version: 3.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/setup-python from 5 to 6 (#3485)

Bumps [actions/setup-python](https://github.com/actions/setup-python) from 5 to 6.
- [Release notes](https://github.com/actions/setup-python/releases)
- [Commits](https://github.com/actions/setup-python/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/setup-python
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/labeler from 5 to 6 (#3484)

Bumps [actions/labeler](https://github.com/actions/labeler) from 5 to 6.
- [Release notes](https://github.com/actions/labeler/releases)
- [Commits](https://github.com/actions/labeler/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/labeler
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.google.protobuf:protobuf-java in /lang/java (#3519)

Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.32.0 to 4.33.0.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-version: 4.33.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.commons:commons-lang3 in /lang/java (#3498)

Bumps org.apache.commons:commons-lang3 from 3.18.0 to 3.19.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-lang3
  dependency-version: 3.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/setup-dotnet from 4 to 5 (#3483)

Bumps [actions/setup-dotnet](https://github.com/actions/setup-dotnet) from 4 to 5.
- [Release notes](https://github.com/actions/setup-dotnet/releases)
- [Commits](https://github.com/actions/setup-dotnet/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/setup-dotnet
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-enforcer-plugin in /lang/java (#3501)

Bumps [org.apache.maven.plugins:maven-enforcer-plugin](https://github.com/apache/maven-enforcer) from 3.6.1 to 3.6.2.
- [Release notes](https://github.com/apache/maven-enforcer/releases)
- [Commits](https://github.com/apache/maven-enforcer/compare/enforcer-3.6.1...enforcer-3.6.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-enforcer-plugin
  dependency-version: 3.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.mockito:mockito-core from 5.19.0 to 5.20.0 in /lang/java (#3495)

Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.19.0 to 5.20.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.19.0...v5.20.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-version: 5.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* AVRO-4136: [c] json encoding of byte[] containing 0x00 (#3375)

Prevent the fixed and bytes type to be preliminary cut off when they
are encoded into the json encoding.

* AVRO-4190: [php] Add logical types (#3526)

* wip

* update logical types

* wip - added logical types

* update PHP workflow

* add composer.json to workflow path

* bump composer version

* add license to AvroLogicalType.php

* add test on logical types

* update test and fix default decimal value

* improve exception messages

* fix lint

* improve types

* add test for decimal schema validation

* add test for decimal schema validation

* remove is_numeric

* add some test for decimal logical type (bytes)

* Add AvroDuration type and extend fixed schema

* additional tests for decimal

* Bump org.apache.maven.plugins:maven-antrun-plugin in /lang/java (#3535)

Bumps [org.apache.maven.plugins:maven-antrun-plugin](https://github.com/apache/maven-antrun-plugin) from 3.1.0 to 3.2.0.
- [Release notes](https://github.com/apache/maven-antrun-plugin/releases)
- [Commits](https://github.com/apache/maven-antrun-plugin/compare/maven-antrun-plugin-3.1.0...maven-antrun-plugin-3.2.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-antrun-plugin
  dependency-version: 3.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump junit5.version from 5.13.4 to 5.14.0 in /lang/java (#3534)

Bumps `junit5.version` from 5.13.4 to 5.14.0.

Updates `org.junit.vintage:junit-vintage-engine` from 5.13.4 to 5.14.0
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.4...r5.14.0)

Updates `org.junit.jupiter:junit-jupiter` from 5.13.4 to 5.14.0
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.13.4...r5.14.0)

---
updated-dependencies:
- dependency-name: org.junit.vintage:junit-vintage-engine
  dependency-version: 5.14.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.14.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-plugin-plugin in /lang/java (#3529)

Bumps [org.apache.maven.plugins:maven-plugin-plugin](https://github.com/apache/maven-plugin-tools) from 3.15.1 to 3.15.2.
- [Release notes](https://github.com/apache/maven-plugin-tools/releases)
- [Commits](https://github.com/apache/maven-plugin-tools/compare/maven-plugin-tools-3.15.1...maven-plugin-tools-3.15.2)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-plugin-plugin
  dependency-version: 3.15.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 12.1.0 to 12.1.1 in /lang/java (#3530)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 12.1.0 to 12.1.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-12.1.0...checkstyle-12.1.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.github.luben:zstd-jni from 1.5.7-5 to 1.5.7-6 in /lang/java (#3531)

Bumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-5 to 1.5.7-6.
- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-5...v1.5.7-6)

---
updated-dependencies:
- dependency-name: com.github.luben:zstd-jni
  dependency-version: 1.5.7-6
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/upload-artifact from 4 to 5 (#3532)

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/download-artifact from 5 to 6 (#3533)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add package-lock.json fpr the docs build

Without it the build fails with:
```
npm error code EUSAGE
npm error
npm error The `npm ci` command can only install with an existing package-lock.json or
npm error npm-shrinkwrap.json with lockfileVersion >= 1. Run an install with npm@5 or
npm error later to generate a package-lock.json file, then try again.
npm error
npm error Clean install a project
```

https://github.com/apache/avro/actions/runs/18835986364/job/53736989550

* AVRO-4180: [C++] Add pkg-config file (#3479)

* [C++] Add pkg-config file

* [C++] Bump minimum required CMake version to 3.20

Required for the cmake_path function for generating the pkg-config file.

* [C++] Correctly join paths for pkg-config file

* Add ASLv2 to the new file

* [C++] add License field to pkg-config file

---------

Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* Bump com.fasterxml.jackson:jackson-bom in /lang/java (#3541)

Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.20.0 to 2.20.1.
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.20.0...jackson-bom-2.20.1)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson:jackson-bom
  dependency-version: 2.20.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump junit5.version from 5.14.0 to 5.14.1 in /lang/java (#3540)

Bumps `junit5.version` from 5.14.0 to 5.14.1.

Updates `org.junit.vintage:junit-vintage-engine` from 5.14.0 to 5.14.1
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.0...r5.14.1)

Updates `org.junit.jupiter:junit-jupiter` from 5.14.0 to 5.14.1
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.0...r5.14.1)

---
updated-dependencies:
- dependency-name: org.junit.vintage:junit-vintage-engine
  dependency-version: 5.14.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.14.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* AVRO-3936: Clean up NOTICE and LICENSE file (#3245)

* AVRO-3936: Clean up NOTICE and LICENSE file

https://issues.apache.org/jira/browse/AVRO-1769 The implementation of Jansson has been removed.
https://github.com/apache/avro/pull/307  The implementation of nunit.framework.dll,Newtonsoft.Json.dll and Castle.Core.dll has been removed.
https://github.com/apache/avro/pull/2756/ The implementation of m4 macros has been removed.
https://github.com/apache/avro/commit/8a42cd0642fcadca7765f59d83a059b1eddb26bd Boost.hhThe implementation of Boost.hh has been removed.

* Update copyright year in NOTICE.txt

---------

Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* AVRO-4194: remove PHP EOL versions and use new language features (#3528)

* remove PHP EOL version, add PHP cs fixer and fix test directory

* add license to .php-cs-fixer.dist.php

* fix missing quote in test-lang-php.yml

* apply automatic changes to lib files and update AvroIO

* update composer version in Dockerfile

* add phpstan, initial cleanup of lib directory

* Remove invalid covers annotations

* fix build.sh

* phpstan.neon license

* improve AvroProtocol code & tests, add/fix types

* fix AvroProtocol due to missing json_validate in php < 8.3

* add other types

* add types and checks

* remove squizlabs/php_codesniffer

* fix some bugs and update static analysis to level 3

* add missing license

* review - fixes

* review - apply lint on lib

* review - apply lint on lib

* add doc field for fixed schemas

* Bump commons-cli:commons-cli from 1.10.0 to 1.11.0 in /lang/java (#3556)

Bumps [commons-cli:commons-cli](https://github.com/apache/commons-cli) from 1.10.0 to 1.11.0.
- [Changelog](https://github.com/apache/commons-cli/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-cli/compare/rel/commons-cli-1.10.0...rel/commons-cli-1.11.0)

---
updated-dependencies:
- dependency-name: commons-cli:commons-cli
  dependency-version: 1.11.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.google.protobuf:protobuf-java in /lang/java (#3555)

Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.0 to 4.33.1.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-version: 4.33.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 12.1.1 to 12.1.2 in /lang/java (#3554)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 12.1.1 to 12.1.2.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-12.1.1...checkstyle-12.1.2)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump autoprefixer from 10.4.21 to 10.4.22 in /doc (#3553)

Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.21 to 10.4.22.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.21...10.4.22)

---
updated-dependencies:
- dependency-name: autoprefixer
  dependency-version: 10.4.22
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.commons:commons-lang3 in /lang/java (#3552)

Bumps org.apache.commons:commons-lang3 from 3.19.0 to 3.20.0.

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-lang3
  dependency-version: 3.20.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.tukaani:xz from 1.10 to 1.11 in /lang/java (#3576)

Bumps [org.tukaani:xz](https://github.com/tukaani-project/xz-java) from 1.10 to 1.11.
- [Release notes](https://github.com/tukaani-project/xz-java/releases)
- [Changelog](https://github.com/tukaani-project/xz-java/blob/master/NEWS.md)
- [Commits](https://github.com/tukaani-project/xz-java/compare/v1.10...v1.11)

---
updated-dependencies:
- dependency-name: org.tukaani:xz
  dependency-version: '1.11'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/checkout from 5 to 6 (#3573)

Bumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump grpc.version from 1.76.0 to 1.77.0 in /lang/java (#3574)

Bumps `grpc.version` from 1.76.0 to 1.77.0.

Updates `io.grpc:grpc-core` from 1.76.0 to 1.77.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.76.0...v1.77.0)

Updates `io.grpc:grpc-stub` from 1.76.0 to 1.77.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.76.0...v1.77.0)

Updates `io.grpc:grpc-netty` from 1.76.0 to 1.77.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.76.0...v1.77.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.77.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.77.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.77.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump BenchmarkDotNet from 0.13.10 to 0.15.8 (#3583)

---
updated-dependencies:
- dependency-name: BenchmarkDotNet
  dependency-version: 0.15.8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Newtonsoft.Json from 13.0.1 to 13.0.4 (#3568)

---
updated-dependencies:
- dependency-name: Newtonsoft.Json
  dependency-version: 13.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Microsoft.NET.Test.Sdk from 17.8.0 to 17.13.0 (#3567)

---
updated-dependencies:
- dependency-name: Microsoft.NET.Test.Sdk
  dependency-version: 17.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump coverlet.msbuild from 6.0.0 to 6.0.4 (#3562)

---
updated-dependencies:
- dependency-name: coverlet.msbuild
  dependency-version: 6.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-source-plugin in /lang/java (#3582)

Bumps [org.apache.maven.plugins:maven-source-plugin](https://github.com/apache/maven-source-plugin) from 3.3.1 to 3.4.0.
- [Release notes](https://github.com/apache/maven-source-plugin/releases)
- [Commits](https://github.com/apache/maven-source-plugin/compare/maven-source-plugin-3.3.1...maven-source-plugin-3.4.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-source-plugin
  dependency-version: 3.4.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* AVRO-4212: add PHP 8.5 to test matrix (#3578)

* add PHP 8.5 to test matrix

* add PHP 8.5 to test matrix

* Bump com.puppycrawl.tools:checkstyle from 12.1.2 to 12.2.0 in /lang/java (#3581)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 12.1.2 to 12.2.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-12.1.2...checkstyle-12.2.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Ensure nuget packages expose license via SPDX expression (#3580)

* Bump System.CodeDom from 8.0.0 to 10.0.0 (#3572)

---
updated-dependencies:
- dependency-name: System.CodeDom
  dependency-version: 10.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump NUnit.ConsoleRunner from 3.16.3 to 3.20.2 (#3570)

---
updated-dependencies:
- dependency-name: NUnit.ConsoleRunner
  dependency-version: 3.20.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump coverlet.collector from 6.0.0 to 6.0.4 (#3561)

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 6.0.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* Bump Microsoft.Build.Framework and Microsoft.Build.Utilities.Core (#3565)

Bumps Microsoft.Build.Framework from 17.8.43 to 18.0.2
Bumps Microsoft.Build.Utilities.Core from 17.8.43 to 18.0.2

---
updated-dependencies:
- dependency-name: Microsoft.Build.Framework
  dependency-version: 18.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
- dependency-name: Microsoft.Build.Utilities.Core
  dependency-version: 18.0.2
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* Bump NUnit3TestAdapter from 4.5.0 to 5.2.0 (#3571)

---
updated-dependencies:
- dependency-name: NUnit3TestAdapter
  dependency-version: 5.2.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* Bump com.google.protobuf:protobuf-java in /lang/java (#3585)

Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.1 to 4.33.2.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-version: 4.33.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.rat:apache-rat-plugin from 0.16.1 to 0.17 in /lang/java (#3520)

Bumps org.apache.rat:apache-rat-plugin from 0.16.1 to 0.17.

---
updated-dependencies:
- dependency-name: org.apache.rat:apache-rat-plugin
  dependency-version: '0.17'
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Microsoft.CodeAnalysis.NetAnalyzers from 8.0.0 to 10.0.100 (#3587)

---
updated-dependencies:
- dependency-name: Microsoft.CodeAnalysis.NetAnalyzers
  dependency-version: 10.0.100
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump NUnit.ConsoleRunner from 3.20.2 to 3.21.0 (#3588)

---
updated-dependencies:
- dependency-name: NUnit.ConsoleRunner
  dependency-version: 3.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump NUnit.ConsoleRunner from 3.21.0 to 3.21.1 (#3605)

---
updated-dependencies:
- dependency-name: NUnit.ConsoleRunner
  dependency-version: 3.21.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump io.netty:netty-bom from 4.2.7.Final to 4.2.9.Final in /lang/java (#3604)

Bumps [io.netty:netty-bom](https://github.com/netty/netty) from 4.2.7.Final to 4.2.9.Final.
- [Commits](https://github.com/netty/netty/compare/netty-4.2.7.Final...netty-4.2.9.Final)

---
updated-dependencies:
- dependency-name: io.netty:netty-bom
  dependency-version: 4.2.9.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump autoprefixer from 10.4.22 to 10.4.23 in /doc (#3603)

Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.22 to 10.4.23.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.22...10.4.23)

---
updated-dependencies:
- dependency-name: autoprefixer
  dependency-version: 10.4.23
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump System.CodeDom from 10.0.0 to 10.0.1 (#3599)

---
updated-dependencies:
- dependency-name: System.CodeDom
  dependency-version: 10.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Microsoft.CodeAnalysis.NetAnalyzers from 10.0.100 to 10.0.101 (#3598)

---
updated-dependencies:
- dependency-name: Microsoft.CodeAnalysis.NetAnalyzers
  dependency-version: 10.0.101
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/cache from 4 to 5 (#3597)

Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/upload-artifact from 5 to 6 (#3596)

Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 5 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v5...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 12.2.0 to 12.3.0 in /lang/java (#3595)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 12.2.0 to 12.3.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-12.2.0...checkstyle-12.3.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump actions/download-artifact from 6 to 7 (#3594)

Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.commons:commons-text from 1.14.0 to 1.15.0 in /lang/java (#3591)

Bumps [org.apache.commons:commons-text](https://github.com/apache/commons-text) from 1.14.0 to 1.15.0.
- [Changelog](https://github.com/apache/commons-text/blob/master/RELEASE-NOTES.txt)
- [Commits](https://github.com/apache/commons-text/compare/rel/commons-text-1.14.0...rel/commons-text-1.15.0)

---
updated-dependencies:
- dependency-name: org.apache.commons:commons-text
  dependency-version: 1.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.mockito:mockito-core from 5.20.0 to 5.21.0 in /lang/java (#3592)

Bumps [org.mockito:mockito-core](https://github.com/mockito/mockito) from 5.20.0 to 5.21.0.
- [Release notes](https://github.com/mockito/mockito/releases)
- [Commits](https://github.com/mockito/mockito/compare/v5.20.0...v5.21.0)

---
updated-dependencies:
- dependency-name: org.mockito:mockito-core
  dependency-version: 5.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.codehaus.mojo:exec-maven-plugin in /lang/java (#3609)

Bumps [org.codehaus.mojo:exec-maven-plugin](https://github.com/mojohaus/exec-maven-plugin) from 3.6.2 to 3.6.3.
- [Release notes](https://github.com/mojohaus/exec-maven-plugin/releases)
- [Commits](https://github.com/mojohaus/exec-maven-plugin/compare/3.6.2...3.6.3)

---
updated-dependencies:
- dependency-name: org.codehaus.mojo:exec-maven-plugin
  dependency-version: 3.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump grpc.version from 1.77.0 to 1.78.0 in /lang/java (#3608)

Bumps `grpc.version` from 1.77.0 to 1.78.0.

Updates `io.grpc:grpc-core` from 1.77.0 to 1.78.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.77.0...v1.78.0)

Updates `io.grpc:grpc-stub` from 1.77.0 to 1.78.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.77.0...v1.78.0)

Updates `io.grpc:grpc-netty` from 1.77.0 to 1.78.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.77.0...v1.78.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.78.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.78.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.78.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump NUnit.ConsoleRunner from 3.21.1 to 3.22.0 (#3613)

---
updated-dependencies:
- dependency-name: NUnit.ConsoleRunner
  dependency-version: 3.22.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 12.3.0 to 12.3.1 in /lang/java (#3612)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 12.3.0 to 12.3.1.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-12.3.0...checkstyle-12.3.1)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 12.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* remove plural marker on abstract non-count noun (#3615)

"Overhead" is an abstract non-count noun and thus it is not normally possible to pluralize it in English.  In this respect it is like "information" or "happiness".

I was not sure which file to make this change in, as I don't know which files are derived from which.  I've you'd like, I can make the change in another location—just let me know where it makes the most sense.

I hope this is helpful.

* Bump System.CodeDom from 10.0.1 to 10.0.2 (#3629)

---
updated-dependencies:
- dependency-name: System.CodeDom
  dependency-version: 10.0.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.google.protobuf:protobuf-java in /lang/java (#3627)

Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.2 to 4.33.4.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-version: 4.33.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* AVRO-4226: Missing doc attributes for record fields (#3624)

* bump composer version

* add missing doc attribute to AvroField

* review + code improvements

* remove AvroNamedSchemata passed by reference

* SchemaTest improvements

* apply Copilot/Martin suggestions

* Update lang/php/lib/Schema/AvroArraySchema.php

Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

---------

Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* [C] Fix negative block size validation in datafile reader (#3623)

* [C] Fix negative block size validation in datafile reader

The file_read_block_count() function in datafile.c reads block size
using zigzag encoding, which can produce negative numbers from
malicious Avro container files. These negative values were passed
directly to avro_malloc(), causing allocation failures.

This patch adds validation to reject negative block size values with
a clear error message before attempting memory allocation.

Bug: Negative block size from varint decoding causes
     allocation-size-too-big when cast to size_t

Impact: DoS via crafted .avro file

Co-Authored-By: Claude <noreply@anthropic.com>

* Add NULL checks after malloc/realloc in file_read_block_count

This addresses reviewer feedback about handling allocation failures.
When block_size is a very large positive number, malloc/realloc
will fail and return NULL. Without NULL checks, this would lead
to a null pointer dereference.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude <noreply@anthropic.com>

* [C] Fix negative length validation in binary decoding (#3622)

* [C] Fix negative length validation in read_bytes and read_string

The read_bytes() and read_string() functions in encoding_binary.c
decode length values using zigzag encoding, which can produce negative
numbers from malicious input. These negative values were passed directly
to avro_malloc(), causing allocation failures or undefined behavior.

This patch adds validation to reject negative length values with a
clear error message before attempting memory allocation.

Bug: Negative length values from varint decoding cause
     allocation-size-too-big when cast to size_t

Impact: DoS via crafted binary input

Co-Authored-By: Claude <noreply@anthropic.com>

* Update lang/c/src/encoding_binary.c

Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* Fix indentation in skip_bytes validation

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Martin Grigorov <martin-g@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 12.3.1 to 13.0.0 in /lang/java (#3620)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 12.3.1 to 13.0.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-12.3.1...checkstyle-13.0.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 13.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump junit5.version from 5.14.1 to 5.14.2 in /lang/java (#3618)

Bumps `junit5.version` from 5.14.1 to 5.14.2.

Updates `org.junit.vintage:junit-vintage-engine` from 5.14.1 to 5.14.2
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.1...r5.14.2)

Updates `org.junit.jupiter:junit-jupiter` from 5.14.1 to 5.14.2
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.1...r5.14.2)

---
updated-dependencies:
- dependency-name: org.junit.vintage:junit-vintage-engine
  dependency-version: 5.14.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.14.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add byte swap definition for Android platform (#3617)

* chore: Format Python code to make its linter happy (#3631)

https://github.com/apache/avro/actions/runs/21238630219/job/61111610761
```
lint: commands[1]> black --check .
would reformat /home/runner/work/avro/avro/lang/py/avro/constants.py
would reformat /home/runner/work/avro/avro/lang/py/avro/__main__.py
would reformat /home/runner/work/avro/avro/lang/py/avro/datafile.py
would reformat /home/runner/work/avro/avro/lang/py/avro/name.py
would reformat /home/runner/work/avro/avro/lang/py/avro/test/test_schema.py

Oh no! 💥 💔 💥
5 files would be reformatted, 36 files would be left unchanged.
lint: exit 1 (2.52 seconds) /home/runner/work/avro/avro/lang/py> black --check . pid=3003
  lint: FAIL code 1 (9.68=setup[6.91]+cmd[0.25,2.52] seconds)
  evaluation failed :( (9.71 seconds)
```

Reformatted the code by temporary removing `check` in `black check .` in tox.ini, running `./build.sh lint`, restore `check`

* fix:improve footer responsiveness on smaller screens (#3626)

* fix:improve footer responsiveness on smaller screens

* fix: address footer responsiveness review feedback

* Bump com.fasterxml.jackson:jackson-bom in /lang/java (#3633)

Bumps [com.fasterxml.jackson:jackson-bom](https://github.com/FasterXML/jackson-bom) from 2.20.1 to 2.21.0.
- [Commits](https://github.com/FasterXML/jackson-bom/compare/jackson-bom-2.20.1...jackson-bom-2.21.0)

---
updated-dependencies:
- dependency-name: com.fasterxml.jackson:jackson-bom
  dependency-version: 2.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache:apache from 35 to 37 in /lang/java (#3628)

Bumps [org.apache:apache](https://github.com/apache/maven-apache-parent) from 35 to 37.
- [Release notes](https://github.com/apache/maven-apache-parent/releases)
- [Commits](https://github.com/apache/maven-apache-parent/commits)

---
updated-dependencies:
- dependency-name: org.apache:apache
  dependency-version: '37'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Improve code quality and increase PHPStan level (#3634)

* improve code quality and increase phpstan level

* update exception messages and fixes check for bz2

* review, round one

* fix bug in AvroStringIO.php

* fix check on primitive type in AvroIODatumReader.php

* Bump com.google.protobuf:protobuf-java in /lang/java (#3644)

Bumps [com.google.protobuf:protobuf-java](https://github.com/protocolbuffers/protobuf) from 4.33.4 to 4.33.5.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Commits](https://github.com/protocolbuffers/protobuf/commits)

---
updated-dependencies:
- dependency-name: com.google.protobuf:protobuf-java
  dependency-version: 4.33.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.puppycrawl.tools:checkstyle from 13.0.0 to 13.2.0 in /lang/java (#3643)

Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 13.0.0 to 13.2.0.
- [Release notes](https://github.com/checkstyle/checkstyle/releases)
- [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-13.0.0...checkstyle-13.2.0)

---
updated-dependencies:
- dependency-name: com.puppycrawl.tools:checkstyle
  dependency-version: 13.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump org.apache.maven.plugins:maven-compiler-plugin in /lang/java (#3642)

Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.14.1 to 3.15.0.
- [Release notes](https://github.com/apache/maven-compiler-plugin/releases)
- [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.14.1...maven-compiler-plugin-3.15.0)

---
updated-dependencies:
- dependency-name: org.apache.maven.plugins:maven-compiler-plugin
  dependency-version: 3.15.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump com.github.luben:zstd-jni from 1.5.7-6 to 1.5.7-7 in /lang/java (#3641)

Bumps [com.github.luben:zstd-jni](https://github.com/luben/zstd-jni) from 1.5.7-6 to 1.5.7-7.
- [Commits](https://github.com/luben/zstd-jni/compare/v1.5.7-6...v1.5.7-7)

---
updated-dependencies:
- dependency-name: com.github.luben:zstd-jni
  dependency-version: 1.5.7-7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump grpc.version from 1.78.0 to 1.79.0 in /lang/java (#3639)

Bumps `grpc.version` from 1.78.0 to 1.79.0.

Updates `io.grpc:grpc-core` from 1.78.0 to 1.79.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.78.0...v1.79.0)

Updates `io.grpc:grpc-stub` from 1.78.0 to 1.79.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.78.0...v1.79.0)

Updates `io.grpc:grpc-netty` from 1.78.0 to 1.79.0
- [Release notes](https://github.com/grpc/grpc-java/releases)
- [Commits](https://github.com/grpc/grpc-java/compare/v1.78.0...v1.79.0)

---
updated-dependencies:
- dependency-name: io.grpc:grpc-core
  dependency-version: 1.79.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-stub
  dependency-version: 1.79.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: io.grpc:grpc-netty
  dependency-version: 1.79.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump autoprefixer from 10.4.23 to 10.4.24 in /doc (#3637)

Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.23 to 10.4.24.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.23...10.4.24)

---
updated-dependencies:
- dependency-name: autoprefixer
  dependency-version: 10.4.24
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump io.netty:netty-bom from 4.2.9.Final to 4.2.10.Final in /lang/java (#3640)

Bumps [io.netty:netty-bom](https://github.com/netty/netty) from 4.2.9.Final to 4.2.10.Final.
- [Commits](https://github.com/netty/netty/compare/netty-4.2.9.Final...netty-4.2.10.Final)

---
updated-dependencies:
- dependency-name: io.netty:netty-bom
  dependency-version: 4.2.10.Final
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* fix: correct typo 'Recieve' to 'Receive' in docstring (#3647)

Co-authored-by: thecaptain789 <thecaptain789@users.noreply.github.com>

* Bump junit5.version from 5.14.2 to 5.14.3 in /lang/java (#3652)

Bumps `junit5.version` from 5.14.2 to 5.14.3.

Updates `org.junit.vintage:junit-vintage-engine` from 5.14.2 to 5.14.3
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.2...r5.14.3)

Updates `org.junit.jupiter:junit-jupiter` from 5.14.2 to 5.14.3
- [Release notes](https://github.com/junit-team/junit-framework/releases)
- [Commits](https://github.com/junit-team/junit-framework/compare/r5.14.2...r5.14.3)

---
updated-dependencies:
- dependency-name: org.junit.vintage:junit-vintage-engine
  dependency-version: 5.14.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
- dependency-name: org.junit.jupiter:junit-jupiter
  dependency-version: 5.14.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump System.CodeDom from 10.0.2 to 10.0.3 (#3657)

---
updated-dependencies:
- dependency-name: System.CodeDom
  dependency-version: 10.0.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump Microsoft.Build.Framework and Microsoft.Build.Utilities.Core (#3656)

Bumps Microsoft.Build.Framework from 18.0.2 to 18.3.3
Bumps Microsoft.Build.Utilities.Core from 18.0.2 to 18.3.3

---
updated-dependencies:
- dependency-name: Microsoft.Build.Framework
  dependency-version: 18.3.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
- dependency-name: Microsoft.Build.Utilities.Core
  dependency-version: 18.3.3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump coverlet.collector from 6.0.4 to 8.0.0 (#3653)

---
updated-dependencies:
- dependency-name: coverlet.collector
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Bump coverlet.msbuild from 6.0.4 to 8.0.0 (#3654)

---
updated-dependencies:
- dependency-name: coverlet.msbuild
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* AVRO-4228: [c++] Fix BinaryDecoder::arrayNext() to handle negative block counts (#3646)

* AVRO-4228: Fix BinaryDecoder::arrayNext() to handle negative block counts

* AVRO-4228: Add test for arrayNext() with negative block counts

* AVRO-4228: Move negative block count to second block in test

* AVRO-4228: Avoid undefined behavior when negating INT64_MIN in doDecodeItemCount

---------

Co-authored-by: Gabriel Feyer <gabriel.feyer@indexexchange.com>

* Upgrade jquery to 3.7.1 due to CVE-2019-11358 (#3579)

* Upgrade jquery to 3.5.0 due to CVE-2019-11358

* bump jquery to 3.7.1

* AVRO-4229 - Update StatsServer resource handler (#3648)

* AVRO-4229 - Update StatsServer resource handler

* Fix review comments

- moved ASFv2 to the top
- static content only served when it is available

* Bump org.javacc.plugin:javacc-maven-plugin in /lang/java (#3663)

Bumps [org.javacc.plugin:javacc-maven-plugin](https://github.com/javacc/javacc-maven-plugin) from 3.0.3 to 3.8.0.
- [Release notes](https://github.com/javacc/javacc-maven-plugin/releases)
- [Changelog](https://github.com/javacc/javacc-maven-plugin/blob/master/docs/release-notes.html)
- [Commits](https://github.com/javacc/javacc-maven-plugin/compare/javacc-maven-plugin-3.0.3...v3.8.0)

---
updated-dependencies:
- dependency-name: org.javacc.plugin:javacc-maven-plugin
  dependency-version: 3.8.0
  dependency-type: direct:production
  update-type: version-update:semver-m…
RyanSkraba added a commit that referenced this pull request Apr 6, 2026
RyanSkraba pushed a commit to RyanSkraba/avro that referenced this pull request Apr 6, 2026
…onsistency (apache#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
RyanSkraba pushed a commit to RyanSkraba/avro that referenced this pull request Apr 30, 2026
…onsistency (apache#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
RyanSkraba pushed a commit that referenced this pull request May 2, 2026
…onsistency (#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
StitchMl pushed a commit to StitchMl/avro that referenced this pull request Jul 13, 2026
…onsistency (apache#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
StitchMl pushed a commit to StitchMl/avro that referenced this pull request Jul 13, 2026
…onsistency (apache#3693)

FastReaderBuilder.findClass() was using data.getClassLoader().loadClass()
directly, bypassing ClassUtils.forName() which is used everywhere else in
the codebase. This change aligns FastReaderBuilder with the standard class
loading path and adds tests for class loading behavior.
@vkolomeyko

vkolomeyko commented Aug 18, 2026

Copy link
Copy Markdown

⚠️ @iemejia @gszadovszky
Avro version 1.12.2 has just been released. When upgrading our applications from version 1.12.1 we started seeing unexpected exceptions like:

java.lang.SecurityException: Forbidden com.company.our.own.Class!
  This class is not trusted to be included in Avro schemas.
    at org.apache.avro.util.ClassSecurityValidator.validate(ClassSecurityValidator.java:60)
    at org.apache.avro.util.ClassUtils.forName(ClassUtils.java:99)
    at org.apache.avro.specific.SpecificData.getForSchema(SpecificData.java:215)
    at org.apache.avro.specific.SpecificDatumWriter.<init>(SpecificDatumWriter.java:47)

I.e. version 1.12.2 created an unwanted effect which now requires setting org.apache.avro.SERIALIZABLE_PACKAGES to be able to work with this version of the library.

More details (AI-generated):

Regression in 1.12.2: SpecificDatumReader/Writer reject the application's own generated classes

Project: Avro · Component: java · Affects Version: 1.12.2 (and current default branch)
Type: Bug · Suggested Priority: Critical — breaks ordinary API usage in a patch release
Introduced by: AVRO-4189 (e0217aefd on main, 3b764e1a on the 1.12 branch, PR #3525)

Summary

Since 1.12.2, constructing a SpecificDatumReader or SpecificDatumWriter for an ordinary
application-generated SpecificRecord class throws SecurityException unless the application
first allowlists its own packages via org.apache.avro.SERIALIZABLE_PACKAGES.

Three of the four standard constructors are affected, including SpecificDatumReader(Class), where
the class is supplied programmatically by the application and never derived from schema data:

Constructor 1.12.1 1.12.2
new SpecificDatumWriter<>(MyRecord.SCHEMA$) OK SecurityException
new SpecificDatumWriter<>(MyRecord.class) OK OK
new SpecificDatumReader<>(MyRecord.SCHEMA$) OK SecurityException
new SpecificDatumReader<>(MyRecord.class) OK SecurityException

No release note or migration entry mentions that applications must now allowlist their own
packages, and 1.12.2 is a patch release.

Reproducer

Two files, avro + its runtime deps on the classpath. No third-party libraries.

package com.example;

import org.apache.avro.Schema;
import org.apache.avro.specific.SpecificRecord;

public class MyRecord implements SpecificRecord {
  public static final Schema SCHEMA$ = new Schema.Parser().parse(
      "{\"type\":\"record\",\"name\":\"MyRecord\",\"namespace\":\"com.example\","
          + "\"fields\":[{\"name\":\"id\",\"type\":\"string\"}]}");

  public CharSequence id;

  @Override public Schema getSchema() { return SCHEMA$; }
  @Override public Object get(int field) { return id; }
  @Override public void put(int field, Object value) { this.id = (CharSequence) value; }
}
import com.example.MyRecord;
import org.apache.avro.specific.SpecificDatumWriter;

public class Repro {
  public static void main(String[] args) {
    new SpecificDatumWriter<>(MyRecord.SCHEMA$);   // OK on 1.12.1, SecurityException on 1.12.2
  }
}

Actual output on 1.12.2:

java.lang.SecurityException: Forbidden com.example.MyRecord! This class is not trusted to be
included in Avro schemas. You may either use the system properties
org.apache.avro.SERIALIZABLE_CLASSES and org.apache.avro.SERIALIZABLE_PACKAGES to set the comma
separated list of the classes or packages you trust, or you can set them via the API (see
org.apache.avro.util.ClassSecurityValidator).
  at org.apache.avro.util.ClassSecurityValidator$ClassSecurityPredicate.forbiddenClass(ClassSecurityValidator.java:106)
  at org.apache.avro.util.ClassSecurityValidator.validate(ClassSecurityValidator.java:60)
  at org.apache.avro.util.ClassUtils.forName(ClassUtils.java:99)
  at org.apache.avro.util.ClassUtils.forName(ClassUtils.java:72)
  at org.apache.avro.specific.SpecificData.lambda$getClass$2(SpecificData.java:393)
  at org.apache.avro.specific.SpecificData.getClass(SpecificData.java:391)
  at org.apache.avro.specific.SpecificData.getForSchema(SpecificData.java:215)
  at org.apache.avro.specific.SpecificDatumWriter.<init>(SpecificDatumWriter.java:47)

Expected: the writer is constructed, as in 1.12.1 and every earlier release.

Adding -Dorg.apache.avro.SERIALIZABLE_PACKAGES=com.example makes 1.12.2 behave as before, which
confirms the validator is the cause.

Root cause

AVRO-4189 moved the trusted-classes allowlist out of SpecificDatumReader into the new
org.apache.avro.util.ClassSecurityValidator, and wired it into the private
ClassUtils.forName(String, ClassLoader) helper:

   private static Class<?> forName(String className, ClassLoader classLoader) {
     ...
-        c = Class.forName(className, true, classLoader);
+        // Load the class without initializing it so we can distinguish between
+        // ClassNotFoundException and SecurityException (that may be thrown by the
+        // validator).
+        c = Class.forName(className, false, classLoader);
+        ClassSecurityValidator.validate(c);

That private helper backs every public ClassUtils.forName overload, so the check now runs on
every class resolution in the library.

Before the change, the allowlist lived in SpecificDatumReader.checkSecurity(String) with exactly
one call site — getPropAsClass(), which only runs when resolving the java-class /
java-key-class / java-element-class schema property while reading:

     try {
-      checkSecurity(name);
       Class clazz = ClassUtils.forName(getData().getClassLoader(), name);
-  private void checkSecurity(String className) throws ClassNotFoundException {
-    ...
-    throw new SecurityException("Forbidden " + className + "! This class is not trusted to be included in Avro "
-        + "schemas using java-class. Please set the system property org.apache.avro.SERIALIZABLE_CLASSES to the comma "

Note the removed message said "...included in Avro schemas using java-class". The new message
drops that qualifier, matching the fact that the check is no longer java-class-scoped.

Why the new call site is too broad

The allowlist exists to stop an untrusted schema from naming an arbitrary class for Avro to load
and instantiate. Two of the newly-affected paths carry no such input:

  1. SpecificDatumWriter construction. SpecificDatumWriter.<init>(Schema)
    SpecificData.getForSchemaSpecificData.getClass(Schema)ClassUtils.forName. This is
    serialization: the application is writing its own objects, and the class name comes from the
    generated schema the application itself ships. There is nothing to defend against.
  2. SpecificDatumReader(Class). The application hands over a Class literal. Rejecting it
    means Avro distrusts a class reference the caller supplied directly, not one it parsed.

Only DEFAULT_TRUSTED_CLASSES is trusted out of the box — a fixed 16-entry JDK list
(java.lang.Boolean, CharSequence, String, java.math.BigDecimal, …) — while
SERIALIZABLE_CLASSES and SERIALIZABLE_PACKAGES default to empty. So the default posture is
"deny every application class".

Why the test suite did not catch it

The same commit added a global systemPropertyVariables block to the surefire configuration in
lang/java/pom.xml, applied to every module:

<org.apache.avro.SERIALIZABLE_PACKAGES>
  org.apache.avro,
  test
</org.apache.avro.SERIALIZABLE_PACKAGES>

with matching additions in lang/java/avro/src/it/pom.xml and
lang/java/interop-data-test/src/it/check/pom.xml. Allowlisting Avro's own test packages made the
suite green and hid the fact that callers outside those packages now need the same treatment. The
commit message ("Fix system property settings in pom") reads as a build fix rather than a signal of
an API behaviour change.

Real-world impact

This took down Kafka publishing in a production payments service for ~63 minutes. The service
serialises avro4k records via AWS's schema-registry-serde; avro4k's Record interface extends
both GenericRecord and SpecificRecord, so the AWS serializer takes its SPECIFIC_RECORD branch
and constructs SpecificDatumWriter(Schema).

Diagnosis was much harder than it should have been, for a reason worth flagging: AWS's
AvroSerializer.getSpecificDatumWriter is annotated with Lombok @SneakyThrows and AWS ships
lombok as provided. The generated catch (Throwable) → lombok.Lombok.sneakyThrow rethrow
therefore failed to link, and the SecurityException was replaced by
NoClassDefFoundError: lombok/Lombok with the original cause discarded. That masking is AWS's bug,
not Avro's, but it illustrates how an unexpected SecurityException from a constructor can surface
somewhere unrecognisable.

Workaround

-Dorg.apache.avro.SERIALIZABLE_PACKAGES=com.mycompany

or ClassSecurityValidator.setGlobal(...) before first use. Both require every affected application
to opt out of a check it did not ask for.

Suggested resolutions

In rough order of preference:

  1. Restore the narrow scope. Keep ClassUtils.forName neutral and validate at the point where
    an untrusted schema property is turned into a class — i.e. back at
    SpecificDatumReader.getPropAsClass() — retaining ClassSecurityValidator as the reusable
    policy object AVRO-4189 introduced.
  2. Exempt caller-supplied and schema-owned class resolution. Add a non-validating resolution path
    used by SpecificData.getClass(Schema) / getForSchema and by the Class-taking reader and
    writer constructors, leaving validation on the decode path.
  3. At minimum, if the broad scope is intentional: treat it as a breaking change — document it in
    the release notes and migration guide, and consider defaulting the validator to permissive with
    an explicit opt-in, so a patch upgrade cannot break working applications silently.

@iemejia

iemejia commented Aug 18, 2026

Copy link
Copy Markdown
Member Author

You are right, @vkolomeyko. This is a breaking change, and we need to communicate it clearly. We somehow forgot to highlight this @RyanSkraba (my excuses for not reminding you about it).

This solution is somewhat radical because it now requires users to explicitly opt in to the classes they consider safe to process. The core issue is that a carefully crafted Avro Schema could potentially execute arbitrary code during deserialization. This is a well-known class of vulnerabilities in Java deserialization and has been reported to us multiple times, most recently in the context of CVE-2025-30065.

For context, the previous changes introduced in issues #3525 and #3538 implemented most of the required infrastructure for this protection. However, the ClassLoader was not correctly validating classes, which is what this PR fixes.

The downside is that Avro users must now explicitly declare which classes are trusted, a requirement that many users are/were not expecting. The upside is significantly improved security, as it prevents unexpected or malicious code execution through schema deserialization.

We've been investing considerable effort in hardening Avro, especially given the recent surge in security reports and vulnerability disclosures. This change is another step in that direction. Sorry for the inconvenience.

@RyanSkraba

RyanSkraba commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Hello! I've been writing the release notes (currently in this PR): #3945 and I've added a Breaking Changes section to address this.

I agree this should have been called out sooner, and I shouldn't have released the 1.12.2 maven artifacts before writing the release notes.

@steam0

steam0 commented Aug 20, 2026

Copy link
Copy Markdown

@RyanSkraba, isnt org.apache.avro.SERIALIZABLE_PACKAGES deprecated ref:

#3376

@joebowbeer

Copy link
Copy Markdown

@RyanSkraba, isnt org.apache.avro.SERIALIZABLE_PACKAGES deprecated ref:

#3376

#3945 (comment)

@RyanSkraba

Copy link
Copy Markdown
Contributor

I've rewritten the breaking changes section at #3945 -- is it clearer to follow?

As far as I can tell, the SERIALIZABLE_PACKAGES system property was moved to a different class and isn't marked deprecated any more.

To be clear, I have zero objection to rapidly doing a release 1.12.3 that relaxes instantiation in a safe and controlled way that makes Avro more usable, and less breaking-changeable. Please bring up any suggestions on the mailing list. At this point, I'm looking to wrap up the 1.12.2 release!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Java Pull Requests for Java binding

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants