Fix OutOfMemoryException in self-referential link substitution #47
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.
Summary
Fixes issue #20 where the query
((($i: 1 21)) (($i: $s $t) ($i 20)))was causing anOutOfMemoryExceptiondue to infinite recursion in theLinksExtensions.EnsureCreatedmethod.Root Cause
The issue occurred in
LinksExtensions.EnsureCreatedwhen processing self-referential link patterns. The method'sdo-whileloop would create links infinitely without ever reaching the targetmaxvalue, eventually exhausting system memory.Solution
Added comprehensive infinite loop protection with multiple safeguards:
Instead of crashing with
OutOfMemoryException, the system now throws a controlledInvalidOperationExceptionwith a descriptive error message.Changes Made
LinksExtensions.EnsureCreatedmethod with loop protectionSelfReferencingLinkSubstitution_ShouldNotCauseInfiniteLoopto verify the fixTest Results
The problematic query now either:
InvalidOperationExceptioninstead ofOutOfMemoryException🤖 Generated with Claude Code
Resolves #20