• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

elixir-mint / mint
91%
main: 90%

Build:
Build:
LAST BUILD BRANCH: fix/http2-validate-request-fields
DEFAULT BRANCH: main
Repo Added 11 Jun 2022 07:10AM UTC
Token xUOJjt5H7KcTvx6ikZQ7qWuMslrGKsjIE regen
Build 412 Last
Files 22
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

LAST BUILD ON BRANCH http2-push-target-validation
branch: http2-push-target-validation
CHANGE BRANCH
x
Reset
Sync Branches
  • http2-push-target-validation
  • al/1.18
  • al/bump-ci
  • al/ci
  • al/client-settings
  • al/deps
  • al/elixir-1.10
  • al/elixir-1.11+
  • al/fix-leak
  • al/fix-tests
  • al/http2-logs
  • al/improve-defguard
  • al/modernize-ci
  • al/stream-docs
  • al/update-ci-versions
  • al/updates
  • allow-not-validating-target
  • allow_302_for_twitter_integration_test
  • andrea/code-coverage
  • andrea/dialyzer
  • andrea/fix-guard
  • andrea/new-ci-versions
  • apply-http2-client-settings
  • check-http2-content-length
  • chore/replace-deprecated-xref-exclude
  • clamp-tunnel-timeout
  • close_sockets_on_error
  • comp-time-optimization
  • configurable-test-ports
  • connect-tunnel-fixes
  • connection-docs-ref
  • contributing-and-testing-housekeeping
  • dialyzer-without-ignore-file
  • docs-for-open
  • dont-close-socket-on-recv-timeout
  • ericmj/deprecate-read-write
  • ericmj/fix-1xx-informational-response
  • ericmj/http2-connection-window-size
  • ericmj/http2-larger-default-windows
  • ericmj/inet4-option
  • ericmj/local-h2c-integration-tests
  • ericmj/support-elixir-1.12
  • ericmj/update-ubuntu
  • fix-cannot-build-docker-image-using-podman-compose
  • fix-dialyzer
  • fix-http1-tests-not-tagged-correctly
  • fix-incorrect-ci-badge
  • fix-warnings
  • fix/446-proxy-host-header
  • fix/http10-connect-tunnel
  • fix/http2-validate-request-fields
  • fix/humize_error_code_custom_error
  • forward-proxy-mode
  • fuzz-http1-mid-scenario-requests
  • fuzz-http1-transfer-codings
  • fuzz-http2-close-listen-socket
  • fuzz-http2-connect-tunnel
  • fuzz-http2-connection-window
  • http-fuzz-properties
  • http1-1xx-close
  • http1-empty-te
  • http1-followups
  • http1-header-parsing
  • http1-line-size-limit
  • http1-pipelining
  • http1-reason-phrase
  • http1-rfc9112-body-rules
  • http1-te-parameters
  • http1-upgrade-pipelined
  • http2-connect-204
  • http2-connect-target
  • http2-followups
  • http2-frame-validation
  • http2-header-block-bound
  • http2-header-list-size-docs
  • http2-push-origin-docs
  • http2-remove-infinity-branches
  • http2-response-semantics
  • http2-server-push
  • https-tunnel-proxies
  • ignore-http2-window-update-on-closed-streams
  • ip-address-match-fun
  • ipv6-host-header
  • jv-default-store
  • jv-elixir-1-19
  • keep-http1-state-after-pipelined-responses
  • main
  • next_body_chunk
  • np/export-error-types
  • optimize-http/2-request-creation
  • patch-3
  • preserve_header_case
  • pvthuyen/add-support-for-cacerts-get
  • refs/heads/main
  • refs/pull/399/merge
  • refs/pull/407/merge
  • refs/pull/500/merge
  • return-responses-in-parse-order
  • rewrite-contributing-and-testing-doc
  • run-ci-against-erlang-27.1
  • stream-http1-headers
  • test-followups
  • test-http2-interim-no-101
  • tunnel-target-identity
  • unnecessary-rst-stream-2
  • unsafe-proxy-opts
  • update-deps
  • use-hpax-protocol-resize
  • use_local_http_bin_in_all_tests
  • v1.10
  • validate-http2-response-headers
  • whatyouhide/issue311
  • wm-decompression
  • wm-docker-compose
  • wm-recv-response
  • wrap-tunnel-errors

28 Sep 2026 02:58PM UTC coverage: 90.566% (+0.1%) from 90.426%
6f91efe05cc1abf0cfad78ed2efc5f28b99a7a97-PR-533

Pull #533

github

ericmj
Validate the target of promised requests

A PUSH_PROMISE was accepted as long as its :scheme and :authority were
non-empty and its :path started with "/", so promises with
:authority "user@localhost" or "localhost:abc", :path "/a b" or
"/a#fragment", or :scheme "1https" were returned as :push_promise
responses. RFC 9113 8.4.1 has the client reset a promised stream whose
request is malformed with PROTOCOL_ERROR.

The :scheme is checked against the RFC 3986 3.1 scheme grammar.

The :authority is parsed as RFC 3986 3.2 [ userinfo "@" ] host
[ ":" port ], where the host is an IP-literal or a reg-name and the port
is zero or more digits. An IP-literal is an IPvFuture or an IPv6
address, optionally followed by "%25" and an RFC 6874 zone ID made of
unreserved and percent-encoded characters. The IPv6 address must be made
of HEXDIG, ":" and "." characters and is then checked with
:inet.parse_ipv6strict_address/1, which on its own accepts a zone ID
after a bare "%" and signs in embedded IPv4 octets. RFC 9113 8.3.1
forbids userinfo for the http and https schemes, and RFC 9110 4.2.1 and
4.2.2 forbid an empty host for them, so ":443" or "@localhost" is
rejected for those schemes. Both checks compare the scheme
case-insensitively, and other schemes keep accepting userinfo and an
empty host. An :authority that is entirely empty is rejected for every
scheme, as before.

The :path is checked as an RFC 9110 absolute-path with an optional
query (RFC 9113 8.3.1), made of pchar, "/" and "?" characters with valid
percent-encoding.
Pull Request #533: Validate the target of promised requests

39 of 41 new or added lines in 1 file covered. (95.12%)

1824 of 2014 relevant lines covered (90.57%)

726.63 hits per line

Relevant lines Covered
Build:
Build:
2014 RELEVANT LINES 1824 COVERED LINES
726.63 HITS PER LINE
Source Files on http2-push-target-validation
  • Tree
  • List 22
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line

Recent builds

Builds Branch Commit Type Ran Committer Via Coverage
6f91efe0... http2-push-target-validation Validate the target of promised requests A PUSH_PROMISE was accepted as long as its :scheme and :authority were non-empty and its :path started with "/", so promises with :authority "user@localhost" or "localhost:abc", :path "/a b" or "/a#fragmen... Pull #533 16 Oct 2026 01:07PM UTC ericmj github
90.57
See All Builds (344)

Badge your Repo: mint

We detected this repo isn’t badged! Grab the embed code to the right, add it to your repo to show off your code coverage, and when the badge is live hit the refresh button to remove this message.

Could not find badge in README.

Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

Refresh
  • Settings
  • Repo on GitHub
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc