My favorites | Sign in
Project Logo
Project hosting will be READ-ONLY Wednesday at 8am PST due to brief network maintenance.
             
New issue | Search
for
| Advanced search | Search tips
Issue 47: StackOverflowError for big String values (JSON to Java)
1 person starred this issue and may be notified of changes. Back to list
Status:  Fixed
Owner:  ----
Closed:  Oct 2008
Type-Defect
Priority-Medium


Sign in to add a comment
 
Reported by dominik.hiltbrunner, Sep 22, 2008
import com.google.gson.Gson;
public class TestGson {
  
  public static void main(String[] args) {
    String str = getJsonString(Integer.parseInt(args[0]));
    GString gString = new Gson().fromJson(str, GString.class);
  }

  public static String getJsonString(int size) {
    StringBuilder builder = new StringBuilder();
    builder.append("{\"value\":\"");
    for (int i = 0; i <= size; i++) {
      builder.append("a");
    }
    builder.append("\"}");
    return builder.toString();
  }

}

public class GString {
  
  private String value = null;

  public String getValue() {
    return value;
  }
  
}

This will always end in an StackOverflowError for big Strings (e.g. 6112) 
at line 303 in JsonParser.java.
Comment 1 by joel.leitch, Sep 22, 2008
Inderjeet knows more about this, but I believe this is a shortcoming with a JavaCC
parser.  It is not efficient at parsing long string values; therefore, if you have a
field in your JSON object with a very long String value (like a stack trace, etc.)
then this will occur.  We explicitly catch this "Error" and rethrow it as a
JsonParseException which should be safe as by the error is caught, all the recursive
function calls have popped off the stack.

We actually have a test for this scenario to ensure that a "JsonParseException" is
thrown instead of a StackOverflowError so that it will not take down the JVM (unless
the client doesn't not care about catching any JsonParseException).

This issue will be fixed once a new parser is implement.  See  issue #28 .
Comment 2 by blexim, Oct 13, 2008
Looks like this was fixed by Inderjeet in r256.
Comment 3 by inder123, Oct 13, 2008
Yes, I have tested the new Gson with strings of size up to 20MB and it worked fine. 
It probably will work for even larger strings, but the test itself starts to generate 
too much GC. Previously, Gson was able to handle strings of about 100kb on the same 
test so I am excited about this fix.
Status: Fixed
Sign in to add a comment

Hosted by Google Code