38
38
ErrInvalid = errors .New ("invalid state detected" )
39
39
ErrInvalidIndex = errors .New ("invalid index referenced" )
40
40
41
+ ErrExpectedObject = errors .New ("invalid value, expected object" )
42
+
41
43
rawJSONArray = []byte ("[]" )
42
44
rawJSONObject = []byte ("{}" )
43
45
rawJSONNull = []byte ("null" )
@@ -134,6 +136,10 @@ func (n *lazyNode) UnmarshalJSON(data []byte) error {
134
136
}
135
137
136
138
func (n * partialDoc ) TrustMarshalJSON (buf * bytes.Buffer ) error {
139
+ if n .obj == nil {
140
+ return ErrExpectedObject
141
+ }
142
+
137
143
if err := buf .WriteByte ('{' ); err != nil {
138
144
return err
139
145
}
@@ -557,6 +563,10 @@ func findObject(pd *container, path string, options *ApplyOptions) (container, s
557
563
}
558
564
559
565
func (d * partialDoc ) set (key string , val * lazyNode , options * ApplyOptions ) error {
566
+ if d .obj == nil {
567
+ return ErrExpectedObject
568
+ }
569
+
560
570
found := false
561
571
for _ , k := range d .keys {
562
572
if k == key {
@@ -579,6 +589,11 @@ func (d *partialDoc) get(key string, options *ApplyOptions) (*lazyNode, error) {
579
589
if key == "" {
580
590
return d .self , nil
581
591
}
592
+
593
+ if d .obj == nil {
594
+ return nil , ErrExpectedObject
595
+ }
596
+
582
597
v , ok := d .obj [key ]
583
598
if ! ok {
584
599
return v , errors .Wrapf (ErrMissing , "unable to get nonexistent key: %s" , key )
@@ -587,6 +602,10 @@ func (d *partialDoc) get(key string, options *ApplyOptions) (*lazyNode, error) {
587
602
}
588
603
589
604
func (d * partialDoc ) remove (key string , options * ApplyOptions ) error {
605
+ if d .obj == nil {
606
+ return ErrExpectedObject
607
+ }
608
+
590
609
_ , ok := d .obj [key ]
591
610
if ! ok {
592
611
if options .AllowMissingPathOnRemove {
0 commit comments