This is an automated email from the ASF dual-hosted git repository.

rhauch pushed a commit to branch 2.1
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/2.1 by this push:
     new f19d6f3  KAFKA-8277: Fix NPEs in several methods of ConnectHeaders 
(#6550)
f19d6f3 is described below

commit f19d6f3723f908e9abc77af356cc4ff1d0f38e75
Author: Sebastián Ortega <sebastian.ort...@letgo.com>
AuthorDate: Mon Apr 22 23:19:58 2019 +0200

    KAFKA-8277: Fix NPEs in several methods of ConnectHeaders (#6550)
    
    Replace `headers.isEmpty()` by calls to `isEmpty()` as the latter does a 
null check on heathers (that is lazily created).
    
    Author: Sebastián Ortega <sebastian.ort...@letgo.com>
    Reviewers: Konstantine Karantasis <konstant...@confluent.io>, Arjun Satish 
<arjunconfluent.io>, Randall Hauch <rha...@gmail.com>
---
 .../kafka/connect/header/ConnectHeaders.java       | 10 +++++-----
 .../kafka/connect/header/ConnectHeadersTest.java   | 23 +++++++++++++++++++++-
 2 files changed, 27 insertions(+), 6 deletions(-)

diff --git 
a/connect/api/src/main/java/org/apache/kafka/connect/header/ConnectHeaders.java 
b/connect/api/src/main/java/org/apache/kafka/connect/header/ConnectHeaders.java
index 185ba65..0b5c484 100644
--- 
a/connect/api/src/main/java/org/apache/kafka/connect/header/ConnectHeaders.java
+++ 
b/connect/api/src/main/java/org/apache/kafka/connect/header/ConnectHeaders.java
@@ -274,7 +274,7 @@ public class ConnectHeaders implements Headers {
     @Override
     public Headers remove(String key) {
         checkKey(key);
-        if (!headers.isEmpty()) {
+        if (!isEmpty()) {
             Iterator<Header> iterator = iterator();
             while (iterator.hasNext()) {
                 if (iterator.next().key().equals(key)) {
@@ -287,7 +287,7 @@ public class ConnectHeaders implements Headers {
 
     @Override
     public Headers retainLatest() {
-        if (!headers.isEmpty()) {
+        if (!isEmpty()) {
             Set<String> keys = new HashSet<>();
             ListIterator<Header> iter = headers.listIterator(headers.size());
             while (iter.hasPrevious()) {
@@ -304,7 +304,7 @@ public class ConnectHeaders implements Headers {
     @Override
     public Headers retainLatest(String key) {
         checkKey(key);
-        if (!headers.isEmpty()) {
+        if (!isEmpty()) {
             boolean found = false;
             ListIterator<Header> iter = headers.listIterator(headers.size());
             while (iter.hasPrevious()) {
@@ -322,7 +322,7 @@ public class ConnectHeaders implements Headers {
     @Override
     public Headers apply(String key, HeaderTransform transform) {
         checkKey(key);
-        if (!headers.isEmpty()) {
+        if (!isEmpty()) {
             ListIterator<Header> iter = headers.listIterator();
             while (iter.hasNext()) {
                 Header orig = iter.next();
@@ -341,7 +341,7 @@ public class ConnectHeaders implements Headers {
 
     @Override
     public Headers apply(HeaderTransform transform) {
-        if (!headers.isEmpty()) {
+        if (!isEmpty()) {
             ListIterator<Header> iter = headers.listIterator();
             while (iter.hasNext()) {
                 Header orig = iter.next();
diff --git 
a/connect/api/src/test/java/org/apache/kafka/connect/header/ConnectHeadersTest.java
 
b/connect/api/src/test/java/org/apache/kafka/connect/header/ConnectHeadersTest.java
index 343bc5d..72418ba 100644
--- 
a/connect/api/src/test/java/org/apache/kafka/connect/header/ConnectHeadersTest.java
+++ 
b/connect/api/src/test/java/org/apache/kafka/connect/header/ConnectHeadersTest.java
@@ -119,6 +119,14 @@ public class ConnectHeadersTest {
     }
 
     @Test
+    public void shouldRetainLatestWhenEmpty() {
+        headers.retainLatest(other);
+        headers.retainLatest(key);
+        headers.retainLatest();
+        assertTrue(headers.isEmpty());
+    }
+
+    @Test
     public void shouldAddMultipleHeadersWithSameKeyAndRetainLatest() {
         populate(headers);
 
@@ -180,6 +188,12 @@ public class ConnectHeadersTest {
     }
 
     @Test
+    public void shouldRemoveAllHeadersWithSameKeyWhenEmpty() {
+        headers.remove(key);
+        assertNoHeaderWithKey(key);
+    }
+
+    @Test
     public void shouldRemoveAllHeadersWithSameKey() {
         populate(headers);
 
@@ -212,6 +226,13 @@ public class ConnectHeadersTest {
     }
 
     @Test
+    public void shouldTransformHeadersWhenEmpty() {
+        headers.apply(appendToKey("-suffix"));
+        headers.apply(key, appendToKey("-suffix"));
+        assertTrue(headers.isEmpty());
+    }
+
+    @Test
     public void shouldTransformHeaders() {
         populate(headers);
 
@@ -544,4 +565,4 @@ public class ConnectHeadersTest {
         assertSame(schema, header.schema());
         assertSame(value, header.value());
     }
-}
\ No newline at end of file
+}

Reply via email to