eclipse-vertx/vertx-openapi

Stackoverflow on parsing API spec given a cyclic reference in schema

mohamnag opened this issue · 5 comments

Version

introduced in 4.4.2, was working in 4.4.1.

Context

While parsing an OpenAPI contract which contains a cyclic reference in the schema, we get a stackoverflow error:

java.lang.StackOverflowError
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1079)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1084)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:1064)
	at io.vertx.core.json.JsonObject.copy(JsonObject.java:38)
	at io.vertx.core.json.impl.JsonUtil.deepCopy(JsonUtil.java:110)

Do you have a reproducer?

here: https://github.com/mohamnag/reproducer-bug-vertx-openapi

Steps to reproduce

use gradle run

I will have a look

fixed

@mohamnag thanks for bringing this up!

In Vert.x 4.4.4 I don't know when it will be released. Because 4.4.3 was just last week.