diff --git a/patch.go b/patch.go index b1ea45f..cd0274e 100644 --- a/patch.go +++ b/patch.go @@ -688,7 +688,7 @@ func (p Patch) test(doc *container, op Operation) error { } if val == nil { - if op.value().raw == nil { + if op.value() == nil || op.value().raw == nil { return nil } return errors.Wrapf(ErrTestFailed, "testing value %s failed", path) diff --git a/patch_test.go b/patch_test.go index 84e2996..98c14ea 100644 --- a/patch_test.go +++ b/patch_test.go @@ -496,6 +496,12 @@ var TestCases = []TestCase{ false, "/foo", }, + { + `{ "baz": [] }`, + `[ { "op": "test", "path": "/foo"} ]`, + true, + "/foo", + }, } func TestAllTest(t *testing.T) { diff --git a/v5/patch.go b/v5/patch.go index a2a6f50..73ff2c5 100644 --- a/v5/patch.go +++ b/v5/patch.go @@ -1006,7 +1006,7 @@ func (p Patch) test(doc *container, op Operation, options *ApplyOptions) error { } if val == nil { - if op.value().raw == nil { + if op.value() == nil || op.value().raw == nil { return nil } return errors.Wrapf(ErrTestFailed, "testing value %s failed", path) diff --git a/v5/patch_test.go b/v5/patch_test.go index 91c6413..58bb7f1 100644 --- a/v5/patch_test.go +++ b/v5/patch_test.go @@ -571,6 +571,13 @@ var Cases = []Case{ }`, false, true, }, + { + `{"baz": []}`, + `[ { "op": "test", "path": "/foo" } ]`, + `{"baz": []}`, + false, + false, + }, } type BadCase struct {