We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
2 parents 0a11acf + c30f020 commit 16a6d0aCopy full SHA for 16a6d0a
7 files changed
CHANGELOG.md
@@ -1,5 +1,8 @@
1
# Changelog
2
3
+## 0.8.6 (31.10.2022)
4
+* Fix wrong binary encoding in the `AssetCode12` module.
5
+
6
## 0.8.5 (25.10.2022)
7
* Enable ExCoveralls with parallel builds.
8
README.md
@@ -24,7 +24,7 @@ You should only use **`stellar_base`** if you are planning to build on top of it
24
```elixir
25
def deps do
26
[
27
- {:stellar_base, "~> 0.8.5"}
+ {:stellar_base, "~> 0.8.6"}
28
]
29
end
30
```
lib/xdr/ledger_entries/asset_code12.ex
@@ -17,7 +17,7 @@ defmodule StellarBase.XDR.AssetCode12 do
17
@impl true
18
def encode_xdr(%__MODULE__{code: code, length: length}) when length in @length_range do
19
code
20
- |> XDR.FixedOpaque.new(length)
+ |> build_opaque(length)
21
|> XDR.FixedOpaque.encode_xdr()
22
23
@@ -26,7 +26,7 @@ defmodule StellarBase.XDR.AssetCode12 do
def encode_xdr!(%__MODULE__{code: code, length: length}) when length in @length_range do
|> XDR.FixedOpaque.encode_xdr!()
31
32
@@ -45,22 +45,24 @@ defmodule StellarBase.XDR.AssetCode12 do
45
46
def decode_xdr!(bytes, term \\ nil)
47
48
- def decode_xdr!(bytes, _term) do
49
- {%XDR.FixedOpaque{opaque: code}, rest} =
+ def decode_xdr!(<<bytes::binary-size(12), rest::binary>>, _term) do
+ {%XDR.FixedOpaque{opaque: code}, _rest} =
50
XDR.FixedOpaque.decode_xdr!(bytes, opaque_spec(bytes))
51
52
{new(code), rest}
53
54
55
+ @spec build_opaque(code :: binary(), length :: non_neg_integer()) :: XDR.FixedOpaque.t()
56
+ defp build_opaque(code, length) do
57
+ zeros = @max_length - length
58
+ bin = <<code::binary, 0::zeros*8>>
59
+ XDR.FixedOpaque.new(bin, @max_length)
60
+ end
61
62
@spec opaque_spec(bytes :: binary()) :: XDR.FixedOpaque.t()
63
defp opaque_spec(bytes), do: XDR.FixedOpaque.new(nil, length_from_binary(bytes, 5))
64
65
@spec length_from_binary(bytes :: binary(), acc :: non_neg_integer()) :: non_neg_integer()
- defp length_from_binary(<<bytes::binary-size(8)>>, acc) do
- opaque = bytes <> <<0, 0, 0, 0>>
- length_from_binary(opaque, acc)
- end
-
66
defp length_from_binary(<<opaque::binary-size(@max_length), _rest::binary>>, acc)
67
when acc in @length_range do
68
<<_hd::binary-size(acc), rest::binary>> = opaque
mix.exs
@@ -2,7 +2,7 @@ defmodule StellarBase.MixProject do
use Mix.Project
@github_url "https://github.com/kommitters/stellar_base"
- @version "0.8.5"
+ @version "0.8.6"
def project do
test/xdr/ledger_entries/asset_code12_test.exs
@@ -47,8 +47,8 @@ defmodule StellarBase.XDR.AssetCode12Test do
test "decode_xdr/2 with a 8-bytes code" do
- {:ok, {%AssetCode12{code: "BTCNE"}, ""}} =
- AssetCode12.decode_xdr(<<66, 84, 67, 78, 69, 0, 0, 0>>)
+ {:ok, {%AssetCode12{code: "BTCNE"}, <<0, 0, 0, 0>>}} =
+ AssetCode12.decode_xdr(<<66, 84, 67, 78, 69, 0, 0, 0, 0, 0, 0, 0>>)
test "decode_xdr/2 with an invalid binary" do
test/xdr/ledger_entries/asset_test.exs
@@ -100,9 +100,9 @@ defmodule StellarBase.XDR.AssetTest do
100
asset_type: asset_type,
101
asset: Asset.new(alpha_num12, asset_type),
102
binary:
103
- <<0, 0, 0, 2, 66, 84, 67, 78, 50, 48, 50, 49, 0, 0, 0, 0, 155, 142, 186, 248, 150, 56,
104
- 85, 29, 207, 158, 164, 247, 67, 32, 113, 16, 107, 135, 171, 14, 45, 179, 214, 155,
105
- 117, 165, 56, 34, 114, 247, 89, 216>>
+ <<0, 0, 0, 2, 66, 84, 67, 78, 50, 48, 50, 49, 0, 0, 0, 0, 0, 0, 0, 0, 155, 142, 186,
+ 248, 150, 56, 85, 29, 207, 158, 164, 247, 67, 32, 113, 16, 107, 135, 171, 14, 45, 179,
+ 214, 155, 117, 165, 56, 34, 114, 247, 89, 216>>
106
}
107
108
test/xdr/ledger_entries/trust_line_asset_test.exs
@@ -102,9 +102,9 @@ defmodule StellarBase.XDR.TrustLineAssetTest do
asset: TrustLineAsset.new(alpha_num12, asset_type),
109
110
0 commit comments