@@ -19,7 +19,7 @@ type Decoder struct {
19
19
scanned int64 // amount of data already scanned
20
20
scan scanner
21
21
err error
22
- errFromMore bool
22
+ errFromMore error
23
23
24
24
tokenState int
25
25
tokenStack []int
@@ -48,14 +48,14 @@ func (dec *Decoder) DisallowUnknownFields() { dec.d.disallowUnknownFields = true
48
48
// See the documentation for [Unmarshal] for details about
49
49
// the conversion of JSON into a Go value.
50
50
func (dec * Decoder ) Decode (v any ) error {
51
- if dec .err != nil {
52
- err := dec .err
53
- if dec .errFromMore {
54
- dec .err = nil
55
- dec .errFromMore = false
56
- }
51
+ if dec .errFromMore != nil {
52
+ err := dec .errFromMore
53
+ dec .errFromMore = nil
57
54
return err
58
55
}
56
+ if dec .err != nil {
57
+ return dec .err
58
+ }
59
59
60
60
if err := dec .tokenPrepareForDecode (); err != nil {
61
61
return err
@@ -371,10 +371,9 @@ func (d Delim) String() string {
371
371
// to mark the start and end of arrays and objects.
372
372
// Commas and colons are elided.
373
373
func (dec * Decoder ) Token () (Token , error ) {
374
- if dec .err != nil && dec .errFromMore {
375
- err := dec .err
376
- dec .err = nil
377
- dec .errFromMore = false
374
+ if dec .errFromMore != nil {
375
+ err := dec .errFromMore
376
+ dec .errFromMore = nil
378
377
return nil , err
379
378
}
380
379
@@ -496,10 +495,13 @@ func (dec *Decoder) More() bool {
496
495
c , err := dec .peek ()
497
496
if err != nil {
498
497
if err == io .EOF {
498
+ // More was called directly after an non-EOF error also from More,
499
+ // this time we've got a io.EOF error, clear it from dec.err, now we
500
+ // are sure that there are no more bytes to be read.
501
+ dec .errFromMore = nil
499
502
return false
500
503
}
501
- dec .err = err
502
- dec .errFromMore = true
504
+ dec .errFromMore = err
503
505
return true
504
506
}
505
507
return c != ']' && c != '}'
0 commit comments