summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuillaume Desvé <guillaume.desve@surycat.com>2019-05-16 14:50:00 +0200
committerGuillaume Desvé <guillaume.desve@surycat.com>2019-05-16 14:50:00 +0200
commit041036376a301300ea3dc1a8d236bb61f8567bca (patch)
tree59c1cac99c199508c4416963de11ccf7400eb46d
parent2990bb3d686c09a1550083336365e99247297711 (diff)
downloadpython-json-patch-041036376a301300ea3dc1a8d236bb61f8567bca.tar.gz
Ensure an item is within the upper array boundaries before replacing it
-rw-r--r--jsonpatch.py2
-rwxr-xr-xtests.py5
2 files changed, 6 insertions, 1 deletions
diff --git a/jsonpatch.py b/jsonpatch.py
index 4f8a02b..1b90bfd 100644
--- a/jsonpatch.py
+++ b/jsonpatch.py
@@ -474,7 +474,7 @@ class ReplaceOperation(PatchOperation):
return value
if isinstance(subobj, MutableSequence):
- if part > len(subobj) or part < 0:
+ if part >= len(subobj) or part < 0:
raise JsonPatchConflict("can't replace outside of list")
elif isinstance(subobj, MutableMapping):
diff --git a/tests.py b/tests.py
index cd39b3b..6ecb017 100755
--- a/tests.py
+++ b/tests.py
@@ -602,6 +602,11 @@ class ConflictTests(unittest.TestCase):
patch_obj = [ { "op": "replace", "path": "/foo/10", "value": 10} ]
self.assertRaises(jsonpatch.JsonPatchConflict, jsonpatch.apply_patch, src, patch_obj)
+ def test_replace_oob_length(self):
+ src = {"foo": [0, 1]}
+ patch_obj = [ { "op": "replace", "path": "/foo/2", "value": 2} ]
+ self.assertRaises(jsonpatch.JsonPatchConflict, jsonpatch.apply_patch, src, patch_obj)
+
def test_replace_missing(self):
src = {"foo": 1}
patch_obj = [ { "op": "replace", "path": "/bar", "value": 10} ]