Cobenian / raygun

A raygun client for Elixir
Apache License 2.0
19 stars 15 forks source link

Trying to parse a malformed json with Poison crashes Logger #17

Closed larskrantz closed 8 years ago

larskrantz commented 8 years ago

Got this issue when an incoming json array had a . after last element. The json is

[
{"foo":"bar"},
]

Some test code, running iex -S mix in raygun project and creating a function crasher with above json will crash logger (starting in a task, otherwise Logger will not pick it up at all):

$ iex -S mix
Erlang/OTP 18 [erts-7.3] [source] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.2.5) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> crasher = fn ->
...(1)>       "[\n{\"foo\":\"bar\"},\n]\n" |> Poison.decode!
...(1)>      end
#Function<20.50752066/0 in :erl_eval.expr/5>
iex(2)> Task.start(crasher) # without Raygun backend
{:ok, #PID<0.189.0>}
iex(3)>
11:23:03.503 [error] Task #PID<0.189.0> started from #PID<0.182.0> terminating
** (Poison.SyntaxError) Unexpected token: ]
    (poison) lib/poison/parser.ex:56: Poison.Parser.parse!/2
    (poison) lib/poison.ex:83: Poison.decode!/2
    (elixir) lib/task/supervised.ex:89: Task.Supervised.do_apply/2
    (stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Function: #Function<20.50752066/0 in :erl_eval.expr/5>
    Args: []

nil
iex(4)> Logger.add_backend(Raygun.Logger)
{:ok, #PID<0.193.0>}
iex(5)> Task.start(crasher) # with Raygun backend

11:23:42.460 [error] Task #PID<0.195.0> started from #PID<0.182.0> terminating
** (Poison.SyntaxError) Unexpected token: ]
    (poison) lib/poison/parser.ex:56: Poison.Parser.parse!/2
    (poison) lib/poison.ex:83: Poison.decode!/2
    (elixir) lib/task/supervised.ex:89: Task.Supervised.do_apply/2
    (stdlib) proc_lib.erl:240: :proc_lib.init_p_do_apply/3
Function: #Function<20.50752066/0 in :erl_eval.expr/5>
    Args: []
{:ok, #PID<0.195.0>}
iex(6)>
11:23:42.499 [error] GenEvent handler Raygun.Logger installed at Logger
** (exit) an exception was raised:
    ** (FunctionClauseError) no function clause matching in Poison.Encoder.List."-encode/3-lists^foldr/2-1-"/3
        (poison) lib/poison/encoder.ex:233: Poison.Encoder.List."-encode/3-lists^foldr/2-1-"(#Function<1.62272487/2 in Poison.Encoder.List.encode/3>, [], "\n    Args: []")
        (poison) lib/poison/encoder.ex:233: Poison.Encoder.List."-encode/3-lists^foldr/2-1-"/3
        (poison) lib/poison/encoder.ex:233: Poison.Encoder.List."-encode/3-lists^foldr/2-1-"/3
        (poison) lib/poison/encoder.ex:233: Poison.Encoder.List.encode/3
        (poison) lib/poison/encoder.ex:213: anonymous fn/4 in Poison.Encoder.Map.encode/3
        (poison) lib/poison/encoder.ex:214: Poison.Encoder.Map."-encode/3-lists^foldl/2-0-"/3
        (poison) lib/poison/encoder.ex:214: Poison.Encoder.Map.encode/3
        (poison) lib/poison/encoder.ex:213: anonymous fn/4 in Poison.Encoder.Map.encode/3

# Snip a lot of errors.. 

=INFO REPORT==== 13-May-2016::11:23:44 ===
    application: logger
    exited: shutdown
    type: temporary
iex(7)>