PublicKey constructor will quietly accept invalid inputs #403
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.
Problem
Encountered the error
invalid transaction: Transaction failed to sanitize accounts offsets correctly
when submiting a Serum SettleFunds command. Managed to pinpoint the root cause of the problem being a rouge space on the end of a public key string constant. Removing this space resolved the issue - this must cause some internal side-effect near theTransactionBuilder
.Further investigation found that PublicKey constructor would silently accept all manner of shenanigans.
Also found that
PublicKey.IsValid
implementation relies onBase58Encoder
validation logic that would accept whitespace.Solution
Added a
FastCheck
internal method toPublicKey
and added calls to it from constructor andIsValid
.Added and modified a few tests.
Deploy Notes
This is potentially a breaking change to any client apps that accept public keys that include whitespace before or after and pass them directly to the constructor. On balance, I believe this enhancement will prevent more problems than it will cause.