diff options
author | Stefan Kögl <stefan@skoegl.net> | 2020-01-28 19:03:52 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-28 19:03:52 +0100 |
commit | b3726f3a8bdcdf0f0841e078228014de8477b0ec (patch) | |
tree | aaaae012bdbbfedf9d1d4951e2663994a8c91f6b | |
parent | 3e44e04f640a1c10b68d00d2b9a6af0c397f06d7 (diff) | |
parent | 041036376a301300ea3dc1a8d236bb61f8567bca (diff) | |
download | python-json-patch-b3726f3a8bdcdf0f0841e078228014de8477b0ec.tar.gz |
Merge pull request #96 from gdraynz/replace-array-indexerror
Ensure an item is within the upper array boundaries before replacing it
-rw-r--r-- | jsonpatch.py | 2 | ||||
-rwxr-xr-x | tests.py | 5 |
2 files changed, 6 insertions, 1 deletions
diff --git a/jsonpatch.py b/jsonpatch.py index 8ec01d3..a474eae 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): @@ -611,6 +611,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} ] |