diff --git a/changelogs/fragments/Bugfix_ipv4_hex.yaml b/changelogs/fragments/Bugfix_ipv4_hex.yaml new file mode 100644 index 0000000..bc39f68 --- /dev/null +++ b/changelogs/fragments/Bugfix_ipv4_hex.yaml @@ -0,0 +1,3 @@ +--- +bugfixes: + - Validate input for ipv4_hex(https://github.com/ansible-collections/ansible.utils/issues/281) diff --git a/plugins/filter/ip4_hex.py b/plugins/filter/ip4_hex.py index 05621f7..4c691a7 100644 --- a/plugins/filter/ip4_hex.py +++ b/plugins/filter/ip4_hex.py @@ -110,6 +110,11 @@ def _ip4_hex(*args, **kwargs): def ip4_hex(arg, delimiter=""): """Convert an IPv4 address to Hexadecimal notation""" + try: + ip = netaddr.IPAddress(arg) + except (netaddr.AddrFormatError, ValueError): + msg = "You must pass a valid IP address; {0} is invalid".format(arg) + raise AnsibleFilterError(msg) numbers = list(map(int, arg.split("."))) return "{0:02x}{sep}{1:02x}{sep}{2:02x}{sep}{3:02x}".format(*numbers, sep=delimiter) diff --git a/tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml b/tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml index 87ac5b1..697eefa 100644 --- a/tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml +++ b/tests/integration/targets/utils_ipaddr_filter/tasks/ip4_hex.yaml @@ -14,3 +14,13 @@ - name: Assert result for ip4_hex. ansible.builtin.assert: that: "{{ result1 == 'c0:a8:01:05' }}" + +- name: Ip4_hex validate input + ansible.builtin.set_fact: + result1: "{{ '555.444.333.999' | ansible.utils.ip4_hex }}" + register: output + ignore_errors: true + +- name: Assert result for ip4_hex. + ansible.builtin.assert: + that: "{{ 'You must pass a valid IP address; 555.444.333.999 is invalid' in output.msg }}"