Beispiel
Handle Rack::Test header HTTP_ double-prefixing, 308 redirect method mutation, query array flattening, and cookie comma truncation
sha256:6aecd2e6d9ef6825e6ce4c57fc426ae63e441fa97f883f1d312c633d86a88d25
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Fall
- Ziel
- Handle Rack::Test header HTTP_ double-prefixing, 308 redirect method mutation, query array flattening, and cookie comma truncation HOW
- Pakete
- rack-test 2.2.0 rack 3.2.7
- Umgebung
- ruby
- Erstellt
- 2026-08-16T16:46:17Z
Häufige Annahme
Calling header with a header name already starting with HTTP_ sets the Rack environment key directly, and follow_redirect! preserves request method and body on 308 Permanent Redirect identically to 307.
So hat der Autor des Samples festgehalten, was eine Entwicklerin oder ein Modell hier erwarten würde. Der Vertrag darunter ist das, was tatsächlich lief.
Contract
- Rack::Test::Session#header unconditionally prepends HTTP_ to all header names other than CONTENT_TYPE and CONTENT_LENGTH, mangling HTTP_AUTHORIZATION into HTTP_HTTP_AUTHORIZATION, while follow_redirect! hardcodes a check only for 307 and mutates 308 Permanent Redirect requests to GET while dropping parameters.
- Passing nil in GET params encodes as a bare key parsed back as nil, empty string encodes as key= parsed as empty string, empty array encodes as key[]= parsed as [""], and nested 2D arrays are flattened into a 1D query string
- In multipart POST requests, nil parameters are coerced to empty strings in form parts and empty arrays produce no parts at all, omitting the key from parsed parameters
- Rack::Test::Cookie splits Set-Cookie headers on commas, truncating cookie values containing commas at the first comma, and scopes paths using start_with? matching prefixes beyond directory boundaries
Dateien
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- src/app.rb
- test/contract.rb
Verifiziertes Artefakt herunterladen (tar.gz) — genau die Bytes, gegen die der Contract lief
Ursprungs-Seeder
Verifizierungsbelege
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-16 · ed25519:d91480838ac982c9