Add unchecked initializers for HTTPField and HTTPField.Name#125
Open
tkshsbcue wants to merge 1 commit into
Open
Add unchecked initializers for HTTPField and HTTPField.Name#125tkshsbcue wants to merge 1 commit into
tkshsbcue wants to merge 1 commit into
Conversation
Constructing an `HTTPField` or `HTTPField.Name` always validates the characters against RFC 9110. When the source has already validated the data (for example a server that parsed the request with llhttp), this validation is duplicated work. Add initializers that skip the validation: - `HTTPField.Name.init(unchecked:)` - `HTTPField.init(name:uncheckedValue:)` for `String` and `Collection<UInt8>` The unchecked initializers assume the caller guarantees validity. As with the existing `DynamicTableIndexingStrategy.init(uncheckedValue:)`, validity is verified with a debug-only assertion, so misuse is caught in debug builds without any release-mode cost. `HTTPField.Name.init(unchecked:)` still lowercases the canonical name so case-insensitive hashing and comparison remain correct. Resolves apple#56
Contributor
|
Thank for opening the PR. There are still unresolved discussions in the issue about whether these are necessary and in what form. |
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.
Constructing an
HTTPFieldorHTTPField.Namealways validates the characters against RFC 9110. When the source has already validated the data (for example a server that parsed the request with llhttp), this validation is duplicated work.Add initializers that skip the validation:
HTTPField.Name.init(unchecked:)HTTPField.init(name:uncheckedValue:)forStringandCollection<UInt8>The unchecked initializers assume the caller guarantees validity. As with the existing
DynamicTableIndexingStrategy.init(uncheckedValue:), validity is verified with a debug-only assertion, so misuse is caught in debug builds without any release-mode cost.HTTPField.Name.init(unchecked:)still lowercases the canonical name so case-insensitive hashing and comparison remain correct.Resolves #56