Skip to content

Commit 78bf227

Browse files
authored
Fix safe JSON encoding of improper lists (#938)
1 parent 5bf38d6 commit 78bf227

File tree

3 files changed

+22
-12
lines changed

3 files changed

+22
-12
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,7 @@
1+
## Unreleased
2+
3+
- Fix safe JSON encoding of improper lists ([#938](https://github.com/getsentry/sentry-elixir/pull/938))
4+
15
## 11.0.3
26

37
#### Various improvements

lib/sentry/client.ex

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -361,18 +361,22 @@ defmodule Sentry.Client do
361361
end
362362

363363
defp sanitize_non_jsonable_value(value, json_library) when is_list(value) do
364-
{mapped, changed?} =
365-
Enum.map_reduce(value, _changed? = false, fn value, changed? ->
366-
case sanitize_non_jsonable_value(value, json_library) do
367-
:unchanged -> {value, changed?}
368-
{:changed, value} -> {value, true}
369-
end
370-
end)
371-
372-
if changed? do
373-
{:changed, mapped}
364+
if List.improper?(value) do
365+
{:changed, inspect(value)}
374366
else
375-
:unchanged
367+
{mapped, changed?} =
368+
Enum.map_reduce(value, _changed? = false, fn value, changed? ->
369+
case sanitize_non_jsonable_value(value, json_library) do
370+
:unchanged -> {value, changed?}
371+
{:changed, value} -> {value, true}
372+
end
373+
end)
374+
375+
if changed? do
376+
{:changed, mapped}
377+
else
378+
:unchanged
379+
end
376380
end
377381
end
378382

test/sentry/client_test.exs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ defmodule Sentry.ClientTest do
6161
bool: true,
6262
null: nil,
6363
int: 2,
64-
map: %{bool: false}
64+
map: %{bool: false},
65+
improper_list: [1 | 2]
6566
},
6667
user: %{id: "valid-ID", email: {"user", "@example.com"}},
6768
tags: %{valid: "yes", tokens: MapSet.new([1])},
@@ -78,6 +79,7 @@ defmodule Sentry.ClientTest do
7879
assert rendered.extra.null == nil
7980
assert rendered.extra.int == 2
8081
assert rendered.extra.map.bool == false
82+
assert rendered.extra.improper_list == "[1 | 2]"
8183

8284
assert rendered.user.id == "valid-ID"
8385
assert rendered.user.email == ~s({"user", "@example.com"})

0 commit comments

Comments
 (0)