GiminKim created KAFKA-20894:
--------------------------------
Summary: StreamsGroupDescription.toString throws
NullPointerException when authorized operations are omitted
Key: KAFKA-20894
URL: https://issues.apache.org/jira/browse/KAFKA-20894
Project: Kafka
Issue Type: Bug
Components: clients
Reporter: GiminKim
Assignee: GiminKim
h2. Problem
`DescribeStreamsGroupsOptions.includeAuthorizedOperations()` defaults to
`false`. In this normal request path, the broker omits authorized operations
and `AdminUtils.validAclOperations()` converts the omitted value to `null`.
`StreamsGroupDescription` and its Javadoc explicitly allow that nullable state.
However, `StreamsGroupDescription.toString()` unconditionally calls
`authorizedOperations.stream()`. As a result, merely logging or rendering a
successfully returned description can throw `NullPointerException`.
h2. Reproduction
{code:java}
StreamsGroupDescription description = result.get();
log.info("group={}", description);
{code}
The failure occurs when authorized operations were not requested:
{code}
includeAuthorizedOperations=false
-> server omits authorized operations
-> validAclOperations() returns null
-> StreamsGroupDescription stores null
-> toString() calls authorizedOperations.stream()
-> NullPointerException
{code}
h2. Expected behavior
`toString()` should handle the documented omitted state and render
`authorizedOperations=null`. Formatting for populated authorized-operation sets
should remain unchanged.
h2. Root cause
The constructor and accessor accept and document `null`, but `toString()`
assumes the set is always non-null.
h2. Proposed fix
Add a null check in `StreamsGroupDescription.toString()` and extend the
existing AdminClient test for an omitted authorized-operations response to
assert that `toString()` does not throw and includes
`authorizedOperations=null`.
h2. Testing
* Targeted `KafkaAdminClientTest` and `DescribeStreamsGroupsHandlerTest`
* Full `clients:test` suite
* Checkstyle and SpotBugs main analysis
* `spotlessCheck`
All applicable local tests and quality checks pass.
h2. Pull request
[apache/kafka#23081|https://github.com/apache/kafka/pull/23081]
--
This message was sent by Atlassian Jira
(v8.20.10#820010)