-
Notifications
You must be signed in to change notification settings - Fork 87
Open
Description
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
[Paste your code here]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
3.7Packages version
swagger_parser: ^1.40.0Metadata
Metadata
Assignees
Labels
No labels