You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/11/15 07:50:19 UTC

tomee git commit: TOMEE-1970 avoid infinite loops for json files without a closing quote for strings

Repository: tomee
Updated Branches:
  refs/heads/master d8af78498 -> a0bb33e78


TOMEE-1970 avoid infinite loops for json files without a closing quote for strings


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/a0bb33e7
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/a0bb33e7
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/a0bb33e7

Branch: refs/heads/master
Commit: a0bb33e7833f60e9416098fd2c519025d42b53db
Parents: d8af784
Author: rmannibucau <rm...@apache.org>
Authored: Tue Nov 15 08:50:05 2016 +0100
Committer: rmannibucau <rm...@apache.org>
Committed: Tue Nov 15 08:50:05 2016 +0100

----------------------------------------------------------------------
 .../apache/openejb/util/SimpleJSonParser.java   |  8 ++--
 .../openejb/util/SimpleJSonParserTest.java      | 42 ++++++++++++++++++++
 2 files changed, 46 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/a0bb33e7/container/openejb-core/src/main/java/org/apache/openejb/util/SimpleJSonParser.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/util/SimpleJSonParser.java b/container/openejb-core/src/main/java/org/apache/openejb/util/SimpleJSonParser.java
index e53e612..99ea6a7 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/util/SimpleJSonParser.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/util/SimpleJSonParser.java
@@ -50,9 +50,9 @@ public final class SimpleJSonParser {
                     current = (char) read;
 
                     b.append(current);
-                } while (current != -1 && current != '\"');
+                } while (read != -1 && current != '\"');
 
-                if (current == -1) {
+                if (read == -1) {
                     throw new IllegalArgumentException("String should be between \"");
                 }
 
@@ -67,7 +67,7 @@ public final class SimpleJSonParser {
                     current = (char) read;
 
                     b.append(current);
-                } while (current != -1 && !isWhiteSpace(current) && current != ',');
+                } while (read != -1 && !isWhiteSpace(current) && current != ',');
 
                 final String value = PropertyPlaceHolderHelper.simpleValue(b.substring(0, b.length() - 1)); // remove last character
                 if (valueRead(is, json, array, value)) {
@@ -86,7 +86,7 @@ public final class SimpleJSonParser {
         do {
             read = is.read();
             c = (char) read;
-        } while (c != -1 && c != ':' && c != '=' && (c == ',' || c == '\n' || c == '\r'));
+        } while (read != -1 && c != ':' && c != '=' && (c == ',' || c == '\n' || c == '\r'));
 
         if (json != null) {
             json.put(value, read(is));

http://git-wip-us.apache.org/repos/asf/tomee/blob/a0bb33e7/container/openejb-core/src/test/java/org/apache/openejb/util/SimpleJSonParserTest.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/test/java/org/apache/openejb/util/SimpleJSonParserTest.java b/container/openejb-core/src/test/java/org/apache/openejb/util/SimpleJSonParserTest.java
new file mode 100644
index 0000000..dddaa91
--- /dev/null
+++ b/container/openejb-core/src/test/java/org/apache/openejb/util/SimpleJSonParserTest.java
@@ -0,0 +1,42 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.openejb.util;
+
+import org.junit.Test;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import static org.junit.Assert.assertNotNull;
+
+public class SimpleJSonParserTest {
+    @Test
+    public void avoidInfiniteLoop_TOMEE1970() throws IOException { // was throwing java.lang.OutOfMemoryError: Java heap space
+        assertNotNull(SimpleJSonParser.read(new ByteArrayInputStream(("{\n" +
+                "  \"resources\":{\n" +
+                "    \"jdbc/test\":{\n" +
+                "      \"type\":\"DataSource\",\n" +
+                "      \"classpath\":\"whatever\",\n" +
+                "      \"properties\":{\n" +
+                "        \"a\":\"b\n" +  // no closing quote is the TOMEE61970 issue
+                "      }\n" +
+                "    }\n" +
+                "  }\n" +
+                "}\n").getBytes(StandardCharsets.UTF_8))));
+    }
+}