Steps to reproduce
When parsing an OpenAPI 3.1.0 spec with mutually recursive (circular) schema references, swagger_parser enters infinite recursion and crashes with a Stack Overflow error.
Expected results
Shouldn't encounter stack overflow error. Either by tracking allready visited schemas or by having a max depth.
Actual results
Stack overflow error
Your OpenApi snippet
Can't share the whole snippet.
Minimal reproducer:
{
"openapi": "3.1.0",
"info": {"title": "Circular Ref Test", "version": "1.0.0"},
"paths": {
"/columns": {
"get": {
"operationId": "getColumns",
"responses": {
"200": {
"description": "OK",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {"$ref": "#/components/schemas/ColumnHeader"}
}
}
}
}
}
}
}
},
"components": {
"schemas": {
"ColumnHeader": {
"type": "object",
"properties": {
"id": {"type": "string"},
"metadata": {
"anyOf": [
{"$ref": "#/components/schemas/LookupMetadata"},
{"type": "null"}
]
}
}
},
"LookupMetadata": {
"type": "object",
"properties": {
"target_header": {
"anyOf": [
{"$ref": "#/components/schemas/ColumnHeader"},
{"type": "null"}
]
}
}
}
}
}
}
Note: The minimal reproducer does not trigger the issue on its own - the stack overflow only manifests with larger specs (1000+ schemas in my case). The circular reference pattern is the root cause, but the issue may depend on spec size or specific combinations of schemas.
Code sample
Code sample
Logs
Logs
Stack Overflow
#0 RangeError.checkValidRange (dart:core/errors.dart:375:3)
#1 _StringBase.split (dart:core-patch/string_patch.dart:991:23)
#2 NormalizedIdentifier._parseDelimitedText (package:swagger_parser/src/parser/model/normalized_identifier.dart:62:19)
#3 new NormalizedIdentifier.parse (package:swagger_parser/src/parser/model/normalized_identifier.dart:30:19)
#4 protectName (package:swagger_parser/src/parser/utils/type_utils.dart:230:47)
#5 OpenApiParser._findType (package:swagger_parser/src/parser/parser/open_api_parser.dart:2031:38)
#6 OpenApiParser._findType (package:swagger_parser/src/parser/parser/open_api_parser.dart:1771:38)
#7 OpenApiParser._findParametersAndImports (package:swagger_parser/src/parser/parser/open_api_parser.dart:808:32)
#8 OpenApiParser._getImportsAndProps (package:swagger_parser/src/parser/parser/open_api_parser.dart:2205:40)
#9 OpenApiParser._findType (package:swagger_parser/src/parser/parser/open_api_parser.dart:1885:54)
... (repeats thousands of times)
Dart version and used packages versions
Dart version
Packages version
I encountered the stack overflow issue when testing the demo website as well.
Steps to reproduce
When parsing an OpenAPI 3.1.0 spec with mutually recursive (circular) schema references, swagger_parser enters infinite recursion and crashes with a Stack Overflow error.
Expected results
Shouldn't encounter stack overflow error. Either by tracking allready visited schemas or by having a max depth.
Actual results
Stack overflow error
Your OpenApi snippet
Can't share the whole snippet.
Minimal reproducer:
Note: The minimal reproducer does not trigger the issue on its own - the stack overflow only manifests with larger specs (1000+ schemas in my case). The circular reference pattern is the root cause, but the issue may depend on spec size or specific combinations of schemas.
Code sample
Code sample
[Paste your code here]Logs
Logs
Dart version and used packages versions
Dart version
3.7Packages version
swagger_parser: ^1.40.0