You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by rh...@apache.org on 2020/10/12 17:08:59 UTC
[kafka] branch 2.6 updated: KAFKA-10574: Fix infinite loop in
Values::parseString (#9375)
This is an automated email from the ASF dual-hosted git repository.
rhauch pushed a commit to branch 2.6
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/2.6 by this push:
new ac12ce9 KAFKA-10574: Fix infinite loop in Values::parseString (#9375)
ac12ce9 is described below
commit ac12ce94481454677bd3684021262c319e6d49bb
Author: Chris Egerton <ch...@confluent.io>
AuthorDate: Mon Oct 12 12:42:42 2020 -0400
KAFKA-10574: Fix infinite loop in Values::parseString (#9375)
Fix infinite loop in Values::parseString
Author: Chris Egerton <ch...@confluent.io>
Reviewers: Konstantine Karantasis <ko...@confluent.io>, Randall Hauch <rh...@gmail.com>
---
.../src/main/java/org/apache/kafka/connect/data/Values.java | 2 +-
.../test/java/org/apache/kafka/connect/data/ValuesTest.java | 13 +++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/connect/api/src/main/java/org/apache/kafka/connect/data/Values.java b/connect/api/src/main/java/org/apache/kafka/connect/data/Values.java
index 7ea9eb4..067c91b 100644
--- a/connect/api/src/main/java/org/apache/kafka/connect/data/Values.java
+++ b/connect/api/src/main/java/org/apache/kafka/connect/data/Values.java
@@ -1193,7 +1193,7 @@ public class Values {
boolean escaped = false;
int start = iter.getIndex();
char c = iter.current();
- while (c != CharacterIterator.DONE) {
+ while (canConsumeNextToken()) {
switch (c) {
case '\\':
escaped = !escaped;
diff --git a/connect/api/src/test/java/org/apache/kafka/connect/data/ValuesTest.java b/connect/api/src/test/java/org/apache/kafka/connect/data/ValuesTest.java
index 63c05ea..cb6f71a 100644
--- a/connect/api/src/test/java/org/apache/kafka/connect/data/ValuesTest.java
+++ b/connect/api/src/test/java/org/apache/kafka/connect/data/ValuesTest.java
@@ -23,6 +23,7 @@ import org.junit.Test;
import java.math.BigDecimal;
import java.math.BigInteger;
+import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -75,6 +76,18 @@ public class ValuesTest {
INT_LIST.add(-987654321);
}
+ @Test(timeout = 5000)
+ public void shouldNotEncounterInfiniteLoop() {
+ // This byte sequence gets parsed as CharacterIterator.DONE and can cause issues if
+ // comparisons to that character are done to check if the end of a string has been reached.
+ // For more information, see https://issues.apache.org/jira/browse/KAFKA-10574
+ byte[] bytes = new byte[] {-17, -65, -65};
+ String str = new String(bytes, StandardCharsets.UTF_8);
+ SchemaAndValue schemaAndValue = Values.parseString(str);
+ assertEquals(Type.STRING, schemaAndValue.schema().type());
+ assertEquals(str, schemaAndValue.value());
+ }
+
@Test
public void shouldNotParseUnquotedEmbeddedMapKeysAsStrings() {
SchemaAndValue schemaAndValue = Values.parseString("{foo: 3}");