Skip to content

Commit 91f1241

Browse files
authored
Do more validation of headers in mkheaders. Fixes #918. (#919)
1 parent b4ac573 commit 91f1241

File tree

2 files changed

+16
-2
lines changed

2 files changed

+16
-2
lines changed

src/Messages.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,14 @@ resource(uri::URI) = string( isempty(uri.path) ? "/" : uri.path,
200200
!isempty(uri.fragment) ? "#" : "", uri.fragment)
201201

202202
mkheaders(h::Headers) = h
203-
mkheaders(h)::Headers = Header[string(k) => string(v) for (k,v) in h]
203+
function mkheaders(h)::Headers
204+
# validation
205+
foreach(h) do head
206+
head isa String && throw(ArgumentError("header must be passed as key => value pair: `$head`"))
207+
length(head) != 2 && throw(ArgumentError("invalid header key-value pair: $head"))
208+
end
209+
return Header[string(k) => string(v) for (k, v) in h]
210+
end
204211

205212
method(r::Request) = getfield(r, :method)
206213
target(r::Request) = getfield(r, :target)

test/messages.jl

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
using Test
22

33
using HTTP.Messages
4-
import HTTP.Messages.appendheader
4+
import HTTP.Messages: appendheader, mkheaders
55
import HTTP.URI
66
import HTTP.request
77
import HTTP: bytes, nbytes
@@ -17,6 +17,13 @@ using JSON
1717
http_reads = ["GET", "HEAD", "OPTIONS"]
1818
http_writes = ["POST", "PUT", "DELETE", "PATCH"]
1919

20+
@testset "Invalid headers" begin
21+
@test_throws ArgumentError mkheaders(["hello"])
22+
@test_throws ArgumentError mkheaders([(1,2,3,4,5)])
23+
@test_throws ArgumentError mkheaders([1, 2])
24+
@test_throws ArgumentError mkheaders(["hello", "world"])
25+
end
26+
2027
@testset "Body Length" begin
2128
@test nbytes(7) === nothing
2229
@test nbytes(UInt8[1,2,3]) == 3

0 commit comments

Comments
 (0)