From 4466d729530639919af44019bc44e0c95912d75a Mon Sep 17 00:00:00 2001 From: hq1 Date: Thu, 8 Feb 2024 16:13:25 +0100 Subject: [PATCH] Parse addresses in strict mode (#28) --- lib/ecto_network/inet.ex | 2 +- test/ecto_network_test.exs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) 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)