[ 
https://issues.apache.org/jira/browse/KAFKA-20894?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

GiminKim updated KAFKA-20894:
-----------------------------
    Description: 
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#23083|https://github.com/apache/kafka/pull/23083]
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:java}
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]

  was:
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]


> 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
>            Priority: Minor
>
> 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#23083|https://github.com/apache/kafka/pull/23083]
> 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:java}
> 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)

Reply via email to