Skip to content

Commit 0000b58

Browse files
committed
update
Change-Id: I52bc6ba07505f2961e8bcac66d3159b280218960
1 parent c364438 commit 0000b58

File tree

1 file changed

+15
-13
lines changed

1 file changed

+15
-13
lines changed

src/encoding/json/stream.go

+15-13
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ type Decoder struct {
1919
scanned int64 // amount of data already scanned
2020
scan scanner
2121
err error
22-
errFromMore bool
22+
errFromMore error
2323

2424
tokenState int
2525
tokenStack []int
@@ -48,14 +48,14 @@ func (dec *Decoder) DisallowUnknownFields() { dec.d.disallowUnknownFields = true
4848
// See the documentation for [Unmarshal] for details about
4949
// the conversion of JSON into a Go value.
5050
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
5754
return err
5855
}
56+
if dec.err != nil {
57+
return dec.err
58+
}
5959

6060
if err := dec.tokenPrepareForDecode(); err != nil {
6161
return err
@@ -371,10 +371,9 @@ func (d Delim) String() string {
371371
// to mark the start and end of arrays and objects.
372372
// Commas and colons are elided.
373373
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
378377
return nil, err
379378
}
380379

@@ -496,10 +495,13 @@ func (dec *Decoder) More() bool {
496495
c, err := dec.peek()
497496
if err != nil {
498497
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
499502
return false
500503
}
501-
dec.err = err
502-
dec.errFromMore = true
504+
dec.errFromMore = err
503505
return true
504506
}
505507
return c != ']' && c != '}'

0 commit comments

Comments
 (0)