diff --git a/lib/ecto_network/inet.ex b/lib/ecto_network/inet.ex index 044b468..5f87e2c 100644 --- a/lib/ecto_network/inet.ex +++ b/lib/ecto_network/inet.ex @@ -33,7 +33,7 @@ defmodule EctoNetwork.INET do address |> String.trim() |> String.to_charlist() - |> :inet.parse_address() + |> :inet.parse_strict_address() parsed_netmask = cast_netmask(netmask, parsed_address) diff --git a/test/ecto_network_test.exs b/test/ecto_network_test.exs index 56ab7b0..200f664 100644 --- a/test/ecto_network_test.exs +++ b/test/ecto_network_test.exs @@ -65,6 +65,14 @@ defmodule EctoNetworkTest do {"is invalid", [type: EctoNetwork.INET, validation: :cast]} end + test "converts shortened address into changeset error" do + changeset = Device.changeset(%Device{}, %{ip_address: "111"}) + {:error, changeset} = TestRepo.insert(changeset) + + assert changeset.errors[:ip_address] == + {"is invalid", [type: EctoNetwork.INET, validation: :cast]} + end + test "converts ipv4 with incomplete CIDR into changeset error" do changeset = Device.changeset(%Device{}, %{ip_address: "1.2.3.0/"}) {:error, changeset} = TestRepo.insert(changeset)