Skip to content

Commit bf24ed2

Browse files
committed
Only ignore UTF-8 BOM since we only support UTF-8
1 parent b9d9fa2 commit bf24ed2

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

lib/poison/parser.ex

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -49,19 +49,10 @@ defmodule Poison.Parser do
4949

5050
@type t :: nil | true | false | list | float | integer | String.t | map
5151

52-
def parse!(<<0xEF, 0xBB, 0xBF, iodata :: binary>>, options) do
53-
parse!(iodata, options)
54-
end
55-
def parse!(<<0xFE, 0xFF, iodata :: binary>>, options) do
56-
parse!(iodata, options)
57-
end
58-
def parse!(<<0xFF, 0xFE, iodata :: binary>>, options) do
59-
parse!(iodata, options)
60-
end
6152
def parse!(iodata, options) do
6253
string = IO.iodata_to_binary(iodata)
6354
keys = Map.get(options, :keys)
64-
{rest, pos} = skip_whitespace(string, 0)
55+
{rest, pos} = skip_whitespace(skip_bom(string), 0)
6556
{value, pos, rest} = value(rest, pos, keys)
6657
case skip_whitespace(rest, pos) do
6758
{"", _pos} -> value
@@ -316,6 +307,16 @@ defmodule Poison.Parser do
316307

317308
defp skip_whitespace(string, pos), do: {string, pos}
318309

310+
# https://tools.ietf.org/html/rfc7159#section-8.1
311+
# https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8
312+
defp skip_bom(<<0xEF, 0xBB, 0xBF>> <> rest) do
313+
rest
314+
end
315+
316+
defp skip_bom(string) do
317+
string
318+
end
319+
319320
## Errors
320321

321322
defp syntax_error(<<token :: utf8>> <> _, pos) do

test/poison/parser_test.exs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,8 @@ defmodule Poison.ParserTest do
9393

9494
expected = %{"foo" => "bar", "baz" => "quux"}
9595
assert parse!(~s( { "foo" : "bar" , "baz" : "quux" } )) == expected
96+
97+
assert parse!(<<0xEF, 0xBB, 0xBF>> <> ~s("foobar")) == "foobar"
9698
end
9799

98100
test "atom keys" do

0 commit comments

Comments
 (0)