Fix stack overflow when validating recursive structures (Issue #248) #261
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR fixes issue #248 where validating recursive CDDL structures would cause a stack overflow due to infinite recursion.
Problem
When validating recursive CDDL structures like:
The validator would enter infinite recursion when encountering self-referential types, leading to a stack overflow crash.
Solution
Added recursion detection to the
CBORValidator
by:visited_rules
HashSet to track which rules are currently being validated in the call stackOk()
to allow the recursive reference while preventing infinite recursionnew_with_recursion_state()
helper to ensure recursion state is properly inheritedChanges
visited_rules: HashSet<String>
field toCBORValidator
visit_identifier()
to detect and handle recursive callsvalidate_recursive_structures()
Testing
[INFO] Validation from stdin is successful
Verification
✅ Fixes the stack overflow issue
✅ Maintains validation correctness
✅ All existing tests pass
✅ Added comprehensive test coverage
✅ No breaking changes
Closes #248