Skip to content

Commit 533832d

Browse files
authored
Improve error message on invalid headers (#24)
1 parent bbc9fe6 commit 533832d

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

lib/hpax.ex

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,8 @@ defmodule HPAX do
298298
end
299299

300300
defp encode_headers([{action, name, value} | rest], table, acc)
301-
when action in @valid_header_actions and is_binary(name) and is_binary(value) do
301+
when action in @valid_header_actions do
302+
validate_header(name, value)
302303
huffman? = table.huffman_encoding == :always
303304

304305
{encoded, table} =
@@ -330,6 +331,15 @@ defmodule HPAX do
330331
encode_headers(rest, table, [acc, encoded])
331332
end
332333

334+
defp validate_header(name, value) when is_binary(name) and is_binary(value) do
335+
:ok
336+
end
337+
338+
defp validate_header(name, value) do
339+
raise ArgumentError,
340+
"expected header name/value to be strings, got: #{inspect(name)}/#{inspect(value)}"
341+
end
342+
333343
defp encode_indexed_header(index) do
334344
<<1::1, Types.encode_integer(index, 7)::bitstring>>
335345
end

test/hpax_test.exs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,22 @@ defmodule HPAXTest do
9595
assert dec_table.entries == [{"b", "B"}, {"a", "A"}]
9696
end
9797

98+
test "encode/3 with invalid headers" do
99+
table = HPAX.new(1000)
100+
101+
assert_raise ArgumentError,
102+
~s(expected header name/value to be strings, got: :foo/"bar"),
103+
fn ->
104+
HPAX.encode([{:store, :foo, "bar"}], table)
105+
end
106+
107+
assert_raise ArgumentError,
108+
~s(expected header name/value to be strings, got: "foo"/:bar),
109+
fn ->
110+
HPAX.encode([{:store, "foo", :bar}], table)
111+
end
112+
end
113+
98114
property "encode/3 with a single action" do
99115
table = HPAX.new(500)
100116

0 commit comments

Comments
 (0)