jackson-jr
jackson-jr copied to clipboard
Add cycle-checking for `JsrValue` constructor (to avoid SOE)
I am sorry but I can't provide more information. My guess this error happend when using JSON.asString to serialize a JsrValue object. The jackson-jr version is 2.11.2.
java.lang.StackOverflowError
at com.fasterxml.jackson.jr.private_.json.WriterBasedJsonGenerator.writeStartObject(WriterBasedJsonGenerator.java:296)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.BeanWriter.writeValue(BeanWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter._writeValue(JSONWriter.java)
at com.fasterxml.jackson.jr.ob.impl.JSONWriter.writeBeanValue(JSONWriter.java)
This would likely result from a cyclic data structure; those can not be serialized by jackson-jr. If this is not the root cause, it would be necessary to have a reproduction.
Please considering add 'clone' support for JrsValue. The current constructor of JrsObject will not check for cyclic data structure.
public JrsObject(Map<String, JrsValue> values) {
_values = values;
}
I will leave this as an RFE, in case someone has an idea of implementation. Implementing support for cyclic data structures is usually a bit complicated thing to do (and tends to add processing overhead due to state keeping required) so this is unlikely to get implemented without contribution.