Skip to content

Commit a65f81a

Browse files
committed
Raise on bad values passed for retry counts
Prevent these from propogating away from where the issue happened.
1 parent c922920 commit a65f81a

File tree

2 files changed

+9
-0
lines changed

2 files changed

+9
-0
lines changed

lib/i2c/i2c_dev.ex

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,10 @@ defmodule Circuits.I2C.I2CDev do
5151
def open(bus_name, options) do
5252
retries = Keyword.get(options, :retries, 0)
5353

54+
if not (is_integer(retries) and retries >= 0) do
55+
raise ArgumentError, "retries must be a non-negative integer"
56+
end
57+
5458
with {:ok, ref, flags} <- Nif.open(bus_name) do
5559
{:ok, %__MODULE__{ref: ref, flags: flags, retries: retries}}
5660
end

test/i2c/i2c_dev_test.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,11 @@ defmodule Circuits.I2CDevTest do
3535
assert {:ok, <<0x30, 0x31, 0x32, 0x33, 0x34>>} == Bus.read(i2c, 0x30, 5, [])
3636
Bus.close(i2c)
3737
end
38+
39+
test "bad retries caught" do
40+
assert_raise ArgumentError, fn -> I2CDev.open("i2c-test-0", retries: -1) end
41+
assert_raise ArgumentError, fn -> I2CDev.open("i2c-test-0", retries: nil) end
42+
end
3843
end
3944

4045
describe "read/4" do

0 commit comments

Comments
 (0)