Reject under-length codes in SedolCheckDigit - #435
Merged
Conversation
isValid only rejected over-length codes, so a short string with a chance modulus 10 check digit validated. Require the validated seven-character form exactly; the calculate path keeps the base-length handling.
Member
|
Thank you @sahvx655-wq , merged 🚀 |
garydgregory
added a commit
that referenced
this pull request
Aug 26, 2026
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.
SedolCheckDigit.SEDOL_CHECK_DIGIT.isValidis a publicCheckDigitentry point with no wrapping validator, yet itscalculateModulusoverride only rejects codes longer than the seven-character weight table. A shorter string whose weighted digits happen to sum to a multiple of ten therefore validates:isValid("55"),isValid("550"),isValid("5500")andisValid("0055")all return true, though a SEDOL is defined as exactly seven characters. I traced it back from the weight loop after noticing the base-classisValiddoes no length check of its own, so this one-sided>comparison is the only thing standing between a short input and a false positive.The guard now also requires the validated form (the code passed with its check digit) to be exactly seven characters, while the calculate path still receives the six-character base and so keeps only the over-length check. Holding the length rule inside
calculateModulus, next to the weight table it depends on, keeps the validate and calculate callers consistent without either repeating it. Left as it was, a caller relying onSEDOL_CHECK_DIGITto screen out malformed identifiers would accept a two-character string as a valid security identifier.