changed
CHANGELOG.md
|
@@ -1,5 +1,10 @@
|
1
1
|
## Changelog
|
2
2
|
|
3
|
+ ## v1.0.5
|
4
|
+
|
5
|
+ * Bug fixes
|
6
|
+ * Support improper lists, bitstrings and structs in safe_binary_to_term
|
7
|
+
|
3
8
|
## v1.0.4
|
4
9
|
|
5
10
|
* Bug fixes
|
changed
hex_metadata.config
|
@@ -38,4 +38,4 @@
|
38
38
|
{<<"name">>,<<"cowboy">>},
|
39
39
|
{<<"optional">>,true},
|
40
40
|
{<<"requirement">>,<<"~> 1.0">>}]]}.
|
41
|
- {<<"version">>,<<"1.0.4">>}.
|
41
|
+ {<<"version">>,<<"1.0.5">>}.
|
changed
lib/plug/crypto.ex
|
@@ -14,7 +14,7 @@ defmodule Plug.Crypto do
|
14
14
|
end
|
15
15
|
|
16
16
|
defp safe_terms(list) when is_list(list) do
|
17
|
- for item <- list, do: safe_terms(item)
|
17
|
+ safe_list(list)
|
18
18
|
list
|
19
19
|
end
|
20
20
|
defp safe_terms(tuple) when is_tuple(tuple) do
|
|
@@ -22,13 +22,13 @@ defmodule Plug.Crypto do
|
22
22
|
tuple
|
23
23
|
end
|
24
24
|
defp safe_terms(map) when is_map(map) do
|
25
|
- for {key, value} <- map do
|
25
|
+ :maps.fold(fn key, value, acc ->
|
26
26
|
safe_terms(key)
|
27
27
|
safe_terms(value)
|
28
|
- end
|
29
|
- map
|
28
|
+ acc
|
29
|
+ end, map, map)
|
30
30
|
end
|
31
|
- defp safe_terms(other) when is_atom(other) or is_number(other) or is_binary(other) or
|
31
|
+ defp safe_terms(other) when is_atom(other) or is_number(other) or is_bitstring(other) or
|
32
32
|
is_pid(other) or is_reference(other) do
|
33
33
|
other
|
34
34
|
end
|
|
@@ -36,6 +36,16 @@ defmodule Plug.Crypto do
|
36
36
|
raise ArgumentError, "cannot deserialize #{inspect other}, the term is not safe for deserialization"
|
37
37
|
end
|
38
38
|
|
39
|
+ defp safe_list([]), do: :ok
|
40
|
+ defp safe_list([h | t]) when is_list(t) do
|
41
|
+ safe_terms(h)
|
42
|
+ safe_list(t)
|
43
|
+ end
|
44
|
+ defp safe_list([h | t]) do
|
45
|
+ safe_terms(h)
|
46
|
+ safe_terms(t)
|
47
|
+ end
|
48
|
+
|
39
49
|
defp safe_tuple(_tuple, 0), do: :ok
|
40
50
|
defp safe_tuple(tuple, n) do
|
41
51
|
safe_terms(:erlang.element(n, tuple))
|
changed
mix.exs
|
@@ -1,7 +1,7 @@
|
1
1
|
defmodule Plug.Mixfile do
|
2
2
|
use Mix.Project
|
3
3
|
|
4
|
- @version "1.0.4"
|
4
|
+ @version "1.0.5"
|
5
5
|
|
6
6
|
def project do
|
7
7
|
[app: :plug,
|