You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by cm...@apache.org on 2019/03/25 16:44:00 UTC
[kafka] branch trunk updated: KAFKA-8150: Fix bugs in handling null
arrays in generated RPC code (#6489)
This is an automated email from the ASF dual-hosted git repository.
cmccabe pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new e0d028b KAFKA-8150: Fix bugs in handling null arrays in generated RPC code (#6489)
e0d028b is described below
commit e0d028bf6cbf140c72706247c40bded7bfabcb0c
Author: Colin Patrick McCabe <co...@cmccabe.xyz>
AuthorDate: Mon Mar 25 09:43:44 2019 -0700
KAFKA-8150: Fix bugs in handling null arrays in generated RPC code (#6489)
ToString functions must not get a NullPointException. read() functions
must properly translate a negative array length to a null field.
Reviewers: Manikumar Reddy <ma...@gmail.com>
---
.../java/org/apache/kafka/common/message/MessageTest.java | 7 +++++--
.../org/apache/kafka/message/MessageDataGenerator.java | 15 ++++++++++-----
2 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java b/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java
index 93a0930..d573b3b 100644
--- a/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java
+++ b/clients/src/test/java/org/apache/kafka/common/message/MessageTest.java
@@ -38,7 +38,6 @@ import org.apache.kafka.common.utils.Utils;
import org.apache.kafka.common.message.AddPartitionsToTxnRequestData.AddPartitionsToTxnTopic;
import org.apache.kafka.common.message.AddPartitionsToTxnRequestData.AddPartitionsToTxnTopicSet;
import org.junit.Assert;
-import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.Timeout;
@@ -47,7 +46,6 @@ import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
-@Ignore
public final class MessageTest {
@Rule
final public Timeout globalTimeout = Timeout.millis(120000);
@@ -87,6 +85,11 @@ public final class MessageTest {
setHostFilter(null).
setOperation((byte) 0).
setPermissionType((byte) 0), (short) 0);
+ testMessageRoundTrips(new MetadataRequestData().
+ setTopics(null).
+ setAllowAutoTopicCreation(false).
+ setIncludeClusterAuthorizedOperations(false).
+ setIncludeTopicAuthorizedOperations(false));
}
private void testMessageRoundTrips(Message message) throws Exception {
diff --git a/generator/src/main/java/org/apache/kafka/message/MessageDataGenerator.java b/generator/src/main/java/org/apache/kafka/message/MessageDataGenerator.java
index 76029f4..c8e70bb 100644
--- a/generator/src/main/java/org/apache/kafka/message/MessageDataGenerator.java
+++ b/generator/src/main/java/org/apache/kafka/message/MessageDataGenerator.java
@@ -416,9 +416,8 @@ public final class MessageDataGenerator {
buffer.printf("int arrayLength = readable.readInt();%n");
buffer.printf("if (arrayLength < 0) {%n");
buffer.incrementIndent();
- buffer.printf("this.%s.clear(%s);%n",
- field.camelCaseName(),
- hasKeys ? "0" : "");
+ buffer.printf("this.%s = null;%n",
+ field.camelCaseName());
buffer.decrementIndent();
buffer.printf("} else {%n");
buffer.incrementIndent();
@@ -1069,8 +1068,14 @@ public final class MessageDataGenerator {
prefix, field.camelCaseName(), field.camelCaseName());
} else if (field.type().isArray()) {
headerGenerator.addImport(MessageGenerator.MESSAGE_UTIL_CLASS);
- buffer.printf("+ \"%s%s=\" + MessageUtil.deepToString(%s.iterator())%n",
- prefix, field.camelCaseName(), field.camelCaseName());
+ if (field.nullableVersions().empty()) {
+ buffer.printf("+ \"%s%s=\" + MessageUtil.deepToString(%s.iterator())%n",
+ prefix, field.camelCaseName(), field.camelCaseName());
+ } else {
+ buffer.printf("+ \"%s%s=\" + ((%s == null) ? \"null\" : " +
+ "MessageUtil.deepToString(%s.iterator()))%n",
+ prefix, field.camelCaseName(), field.camelCaseName(), field.camelCaseName());
+ }
} else {
throw new RuntimeException("Unsupported field type " + field.type());
}