diff --git a/jsonpointer.py b/jsonpointer.py index 3e97add..41d580c 100644 --- a/jsonpointer.py +++ b/jsonpointer.py @@ -152,7 +152,7 @@ class JsonPointer(object): # Array indices must not contain: # leading zeros, signs, spaces, decimals, etc - _RE_ARRAY_INDEX = re.compile('0|[1-9][0-9]*$') + _RE_ARRAY_INDEX = re.compile('^(?:0|[1-9][0-9]*)$') _RE_INVALID_ESCAPE = re.compile('(~[^01]|~$)') def __init__(self, pointer): diff --git a/tests.py b/tests.py index 7b1cdac..b4251fe 100755 --- a/tests.py +++ b/tests.py @@ -220,6 +220,13 @@ def test_invalid_index(self): doc = [0, 1, 2] self.assertRaises(JsonPointerException, resolve_pointer, doc, '/a') + def test_invalid_index_leading_zeros(self): + # RFC 6901 specifies that array indices must not have leading zeros + doc = [0, 1, 2] + self.assertRaises(JsonPointerException, resolve_pointer, doc, '/01') + self.assertRaises(JsonPointerException, resolve_pointer, doc, '/00') + self.assertRaises(JsonPointerException, resolve_pointer, doc, '/001') + def test_oob(self): # this list does not have 10 members doc = [0, 1, 2]