From 2f45a8200db081a897e1be3bce02a4159f81cc6d Mon Sep 17 00:00:00 2001 From: Gary Russell Date: Thu, 14 Apr 2022 16:10:11 -0400 Subject: [PATCH] Fix TopicPartitionOffset Hash Code (NPE) **cherry-pick to all supported** --- .../kafka/support/TopicPartitionOffset.java | 2 +- .../kafka/support/TopicPartitionOffsetTests.java | 11 ++++++++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/spring-kafka/src/main/java/org/springframework/kafka/support/TopicPartitionOffset.java b/spring-kafka/src/main/java/org/springframework/kafka/support/TopicPartitionOffset.java index 478b83f1..530b909c 100644 --- a/spring-kafka/src/main/java/org/springframework/kafka/support/TopicPartitionOffset.java +++ b/spring-kafka/src/main/java/org/springframework/kafka/support/TopicPartitionOffset.java @@ -213,7 +213,7 @@ public class TopicPartitionOffset { @Override public int hashCode() { - return this.topicPartition.hashCode() + this.position.hashCode(); + return Objects.hash(this.topicPartition, this.position); } @Override diff --git a/spring-kafka/src/test/java/org/springframework/kafka/support/TopicPartitionOffsetTests.java b/spring-kafka/src/test/java/org/springframework/kafka/support/TopicPartitionOffsetTests.java index 13f9816a..1ad0d983 100644 --- a/spring-kafka/src/test/java/org/springframework/kafka/support/TopicPartitionOffsetTests.java +++ b/spring-kafka/src/test/java/org/springframework/kafka/support/TopicPartitionOffsetTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2020 the original author or authors. + * Copyright 2020-2022 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,6 +18,9 @@ package org.springframework.kafka.support; import static org.assertj.core.api.Assertions.assertThat; +import java.util.Objects; + +import org.apache.kafka.common.TopicPartition; import org.junit.jupiter.api.Test; import org.springframework.kafka.support.TopicPartitionOffset.SeekPosition; @@ -35,4 +38,10 @@ public class TopicPartitionOffsetTests { .isNotEqualTo(new TopicPartitionOffset("foo", 1, SeekPosition.END).hashCode()); } + @Test + void hashCodeNPE() { + assertThat(new TopicPartitionOffset("foo", 0).hashCode()) + .isEqualTo(Objects.hash(new TopicPartition("foo", 0), null)); + } + }