While inputing 'ICMP type' and 'ICMP code' at [1], validation is done which raises 'ValidationError', at [2] so if validation fails corresponding value is set to None. Then why is ValidationError raised again in [3]. Where is 'ValidationError' at [3] caught? [1] openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py [1] https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py#L180 [2] horizon/utils/validators.py -> validate_port_range() [2] https://github.com/openstack/horizon/blob/master/horizon/utils/validators.py#L26 [3] openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py -> AddRule._clean_rule_icmp [3] https://github.com/openstack/horizon/blob/master/openstack_dashboard/dashboards/project/access_and_security/security_groups/forms.py#L293