Skip to content

Add unchecked initializers for HTTPField and HTTPField.Name#125

Open
tkshsbcue wants to merge 1 commit into
apple:mainfrom
tkshsbcue:add-unchecked-field-initializers
Open

Add unchecked initializers for HTTPField and HTTPField.Name#125
tkshsbcue wants to merge 1 commit into
apple:mainfrom
tkshsbcue:add-unchecked-field-initializers

Conversation

@tkshsbcue

Copy link
Copy Markdown

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 #56

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
@guoye-zhang

Copy link
Copy Markdown
Contributor

Thank for opening the PR. There are still unresolved discussions in the issue about whether these are necessary and in what form.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add unsafe initialisers for HTTPField and HTTPField.Name

2 participants