You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by nt...@apache.org on 2023/01/27 11:06:55 UTC

[cayenne] 01/02: CAY-2789 MalformedJsonException thrown when reading manually edited JSON data in Postgres

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

ntimofeev pushed a commit to branch STABLE-4.2
in repository https://gitbox.apache.org/repos/asf/cayenne.git

commit ca04d2bd2d49d338b701dbf3005c8b34372ed508
Author: Mikhail Dzianishchyts <mi...@gmail.com>
AuthorDate: Tue Jan 17 11:22:45 2023 +0300

    CAY-2789 MalformedJsonException thrown when reading manually edited JSON data in Postgres
    
    (cherry picked from commit 6634ecba37d0a7dd07eeff7643b03a5207b93951)
---
 .../main/java/org/apache/cayenne/value/json/JsonTokenizer.java |  3 +++
 .../java/org/apache/cayenne/value/json/JsonTokenizerTest.java  | 10 ++++++++++
 2 files changed, 13 insertions(+)

diff --git a/cayenne-server/src/main/java/org/apache/cayenne/value/json/JsonTokenizer.java b/cayenne-server/src/main/java/org/apache/cayenne/value/json/JsonTokenizer.java
index 14f415240..9ab9ec46e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/value/json/JsonTokenizer.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/value/json/JsonTokenizer.java
@@ -52,6 +52,9 @@ final class JsonTokenizer {
         while (position < data.length) {
             // skip whitespace
             skipWhitespace();
+            if (position == data.length) {
+                break;
+            }
             JsonToken token = nextValue();
             // only string could be used as an object member name
             if (states[currentState] == State.OBJECT_MEMBER_NAME) {
diff --git a/cayenne-server/src/test/java/org/apache/cayenne/value/json/JsonTokenizerTest.java b/cayenne-server/src/test/java/org/apache/cayenne/value/json/JsonTokenizerTest.java
index daea7cb05..c64d01415 100644
--- a/cayenne-server/src/test/java/org/apache/cayenne/value/json/JsonTokenizerTest.java
+++ b/cayenne-server/src/test/java/org/apache/cayenne/value/json/JsonTokenizerTest.java
@@ -28,6 +28,16 @@ import static org.junit.Assert.assertEquals;
  */
 public class JsonTokenizerTest {
 
+    @Test
+    public void testEmpty() {
+        JsonTokenizer tokenizer;
+        JsonTokenizer.JsonToken token;
+
+        tokenizer = new JsonTokenizer("");
+        token = tokenizer.nextToken();
+        assertEquals(JsonTokenizer.TokenType.NONE, token.type);
+    }
+
     @Test
     public void testNull() {
         JsonTokenizer tokenizer;