Skip to content

Commit 16a6d0a

Browse files
Merge pull request #203 from kommitters/v0.8
Release v0.8.6
2 parents 0a11acf + c30f020 commit 16a6d0a

7 files changed

Lines changed: 24 additions & 19 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
# Changelog
22

3+
## 0.8.6 (31.10.2022)
4+
* Fix wrong binary encoding in the `AssetCode12` module.
5+
36
## 0.8.5 (25.10.2022)
47
* Enable ExCoveralls with parallel builds.
58

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ You should only use **`stellar_base`** if you are planning to build on top of it
2424
```elixir
2525
def deps do
2626
[
27-
{:stellar_base, "~> 0.8.5"}
27+
{:stellar_base, "~> 0.8.6"}
2828
]
2929
end
3030
```

lib/xdr/ledger_entries/asset_code12.ex

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ defmodule StellarBase.XDR.AssetCode12 do
1717
@impl true
1818
def encode_xdr(%__MODULE__{code: code, length: length}) when length in @length_range do
1919
code
20-
|> XDR.FixedOpaque.new(length)
20+
|> build_opaque(length)
2121
|> XDR.FixedOpaque.encode_xdr()
2222
end
2323

@@ -26,7 +26,7 @@ defmodule StellarBase.XDR.AssetCode12 do
2626
@impl true
2727
def encode_xdr!(%__MODULE__{code: code, length: length}) when length in @length_range do
2828
code
29-
|> XDR.FixedOpaque.new(length)
29+
|> build_opaque(length)
3030
|> XDR.FixedOpaque.encode_xdr!()
3131
end
3232

@@ -45,22 +45,24 @@ defmodule StellarBase.XDR.AssetCode12 do
4545
@impl true
4646
def decode_xdr!(bytes, term \\ nil)
4747

48-
def decode_xdr!(bytes, _term) do
49-
{%XDR.FixedOpaque{opaque: code}, rest} =
48+
def decode_xdr!(<<bytes::binary-size(12), rest::binary>>, _term) do
49+
{%XDR.FixedOpaque{opaque: code}, _rest} =
5050
XDR.FixedOpaque.decode_xdr!(bytes, opaque_spec(bytes))
5151

5252
{new(code), rest}
5353
end
5454

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+
5562
@spec opaque_spec(bytes :: binary()) :: XDR.FixedOpaque.t()
5663
defp opaque_spec(bytes), do: XDR.FixedOpaque.new(nil, length_from_binary(bytes, 5))
5764

5865
@spec length_from_binary(bytes :: binary(), acc :: non_neg_integer()) :: non_neg_integer()
59-
defp length_from_binary(<<bytes::binary-size(8)>>, acc) do
60-
opaque = bytes <> <<0, 0, 0, 0>>
61-
length_from_binary(opaque, acc)
62-
end
63-
6466
defp length_from_binary(<<opaque::binary-size(@max_length), _rest::binary>>, acc)
6567
when acc in @length_range do
6668
<<_hd::binary-size(acc), rest::binary>> = opaque

mix.exs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ defmodule StellarBase.MixProject do
22
use Mix.Project
33

44
@github_url "https://github.com/kommitters/stellar_base"
5-
@version "0.8.5"
5+
@version "0.8.6"
66

77
def project do
88
[

test/xdr/ledger_entries/asset_code12_test.exs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,8 @@ defmodule StellarBase.XDR.AssetCode12Test do
4747
end
4848

4949
test "decode_xdr/2 with a 8-bytes code" do
50-
{:ok, {%AssetCode12{code: "BTCNE"}, ""}} =
51-
AssetCode12.decode_xdr(<<66, 84, 67, 78, 69, 0, 0, 0>>)
50+
{:ok, {%AssetCode12{code: "BTCNE"}, <<0, 0, 0, 0>>}} =
51+
AssetCode12.decode_xdr(<<66, 84, 67, 78, 69, 0, 0, 0, 0, 0, 0, 0>>)
5252
end
5353

5454
test "decode_xdr/2 with an invalid binary" do

test/xdr/ledger_entries/asset_test.exs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ defmodule StellarBase.XDR.AssetTest do
100100
asset_type: asset_type,
101101
asset: Asset.new(alpha_num12, asset_type),
102102
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>>
103+
<<0, 0, 0, 2, 66, 84, 67, 78, 50, 48, 50, 49, 0, 0, 0, 0, 0, 0, 0, 0, 155, 142, 186,
104+
248, 150, 56, 85, 29, 207, 158, 164, 247, 67, 32, 113, 16, 107, 135, 171, 14, 45, 179,
105+
214, 155, 117, 165, 56, 34, 114, 247, 89, 216>>
106106
}
107107
end
108108

test/xdr/ledger_entries/trust_line_asset_test.exs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -102,9 +102,9 @@ defmodule StellarBase.XDR.TrustLineAssetTest do
102102
asset_type: asset_type,
103103
asset: TrustLineAsset.new(alpha_num12, asset_type),
104104
binary:
105-
<<0, 0, 0, 2, 66, 84, 67, 78, 50, 48, 50, 49, 0, 0, 0, 0, 155, 142, 186, 248, 150, 56,
106-
85, 29, 207, 158, 164, 247, 67, 32, 113, 16, 107, 135, 171, 14, 45, 179, 214, 155,
107-
117, 165, 56, 34, 114, 247, 89, 216>>
105+
<<0, 0, 0, 2, 66, 84, 67, 78, 50, 48, 50, 49, 0, 0, 0, 0, 0, 0, 0, 0, 155, 142, 186,
106+
248, 150, 56, 85, 29, 207, 158, 164, 247, 67, 32, 113, 16, 107, 135, 171, 14, 45, 179,
107+
214, 155, 117, 165, 56, 34, 114, 247, 89, 216>>
108108
}
109109
end
110110

0 commit comments

Comments
 (0)