From b2ce50721b56187223a450565ab975f6a61ab658 Mon Sep 17 00:00:00 2001 From: Daniel Spofford Date: Wed, 10 Apr 2019 18:31:10 -0500 Subject: [PATCH] Fix ArrayedData WRT an empty binary --- lib/harald/hci/arrayed_data.ex | 4 ++++ test/harald/hci/arrayed_data_test.exs | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 test/harald/hci/arrayed_data_test.exs diff --git a/lib/harald/hci/arrayed_data.ex b/lib/harald/hci/arrayed_data.ex index c8038df..a668ed7 100644 --- a/lib/harald/hci/arrayed_data.ex +++ b/lib/harald/hci/arrayed_data.ex @@ -60,6 +60,10 @@ defmodule Harald.HCI.ArrayedData do @doc """ Deserializes the binary representation of a list of structs according to `schema`. """ + def deserialize(schema, length, struct_module, bin) + + def deserialize(_, length, _, <<>>) when length > 0, do: {:error, :incomplete} + def deserialize(schema, length, struct_module, bin) do schema |> deserialize(bin, %{ diff --git a/test/harald/hci/arrayed_data_test.exs b/test/harald/hci/arrayed_data_test.exs new file mode 100644 index 0000000..3210aae --- /dev/null +++ b/test/harald/hci/arrayed_data_test.exs @@ -0,0 +1,12 @@ +defmodule Harald.HCI.ArrayedDataTest do + use ExUnit.Case, async: true + alias Harald.HCI.{ArrayedData, Event.LEMeta.AdvertisingReport.Device} + + doctest ArrayedData, import: true + + describe "deserialize/4" do + test "an empty binary results in an error" do + assert {:error, :incomplete} == ArrayedData.deserialize([], 1, Device, <<>>) + end + end +end