From 1ca7d219e61efa68958adae2a330eca25d0ca21b Mon Sep 17 00:00:00 2001 From: Julian Berman Date: Wed, 19 Feb 2014 20:36:31 -0500 Subject: [PATCH] As per the spec, only dotted-quad IPv4 addresses are valid. Closes: #149 --- jsonschema/_format.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/jsonschema/_format.py b/jsonschema/_format.py index 2a9b5c1..bb52d18 100644 --- a/jsonschema/_format.py +++ b/jsonschema/_format.py @@ -123,11 +123,15 @@ def is_email(instance): return "@" in instance -@_checks_drafts(draft3="ip-address", draft4="ipv4", raises=socket.error) +_ipv4_re = re.compile(r"^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$") + +@_checks_drafts(draft3="ip-address", draft4="ipv4") def is_ipv4(instance): if not isinstance(instance, str_types): return True - return socket.inet_aton(instance) + if not _ipv4_re.match(instance): + return False + return all(0 <= int(component) <= 255 for component in instance.split(".")) if hasattr(socket, "inet_pton"):