Fix: Correct IPv6 address collapsing to prevent multiple '::'#103
Merged
Fix: Correct IPv6 address collapsing to prevent multiple '::'#103
Conversation
The `collapseIPv6Number` function was incorrectly producing IPv6 strings with multiple "::" segments in certain cases. This was due to a flawed replacement logic that could introduce a "::" and then later identify another segment as compressible. The function has been rewritten to follow the standard algorithm for IPv6 address collapsing (RFC 5952): 1. Expand the input IPv6 address to its full 8 hexadecatets. 2. Identify all sequences of zero-value hexadecatets. 3. Select the longest sequence (if multiple of same longest length, select the first one). 4. If this sequence consists of two or more hexadecatets, replace it with "::". 5. Otherwise (if the longest sequence is just one hexadecatet, or no zeros), no "::" compression is applied unless the entire address is zeros (which becomes "::"). 6. All non-compressed hexadecatets are shortened by removing leading zeros. This change resolves issue #99. Added comprehensive test cases to `spec/IPv6UtilsTest.ts` to cover: - The specific failing cases reported in the GitHub issue. - Addresses with multiple zero sequences of varying lengths and positions. - Addresses starting or ending with zero sequences. - The all-zero address. - Addresses with no compressible zeros (single zero blocks). - Idempotency for already collapsed addresses. - Addresses with prefixes. All tests, including the new ones (total 322), pass with these changes.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
The
collapseIPv6Numberfunction was incorrectly producing IPv6 strings with multiple "::" segments in certain cases. This was due to a flawed replacement logic that could introduce a "::" and then later identify another segment as compressible.The function has been rewritten to follow the standard algorithm for IPv6 address collapsing (RFC 5952):
This change resolves issue closes #99.
Added comprehensive test cases to
spec/IPv6UtilsTest.tsto cover:All tests, including the new ones (total 322), pass with these changes.