• Russ Cox's avatar
    encoding/json: take new decoder code off Decode path completely · 22936858
    Russ Cox authored
    The new Token API is meant to sit on the side of the Decoder,
    so that you only get the new code (and any latent bugs in it)
    if you are actively using the Token API.
    
    The unconditional use of dec.peek in dec.tokenPrepareForDecode
    violates that intention.
    
    Change tokenPrepareForDecode not to call dec.peek unless needed
    (because the Token API has advanced the state).
    This restores the old code path behavior, no peeking allowed.
    
    I checked by patching in the new tests from CL 12726 that
    this change suffices to "fix" the error handling bug in dec.peek.
    Obviously that bug should be fixed too, but the point is that
    with this CL, bugs in dec.peek do not affect plain use of Decode
    or Unmarshal.
    
    I also checked by putting a panic in dec.peek that the only
    tests that now invoke peek are:
    
    	TestDecodeInStream
    	ExampleDecoder_Token
    	ExampleDecoder_Decode_stream
    
    and those tests all invoke dec.Token directly.
    
    Change-Id: I0b242d0cb54a9c830548644670dc5ab5ccef69f2
    Reviewed-on: https://go-review.googlesource.com/12740Reviewed-by: 's avatarAndrew Gerrand <adg@golang.org>
    Reviewed-by: 's avatarPeter Waldschmidt <peter@waldschmidt.com>
    22936858
Name
Last commit
Last update
..
archive Loading commit data...
bufio Loading commit data...
builtin Loading commit data...
bytes Loading commit data...
cmd Loading commit data...
compress Loading commit data...
container Loading commit data...
crypto Loading commit data...
database/sql Loading commit data...
debug Loading commit data...
encoding Loading commit data...
errors Loading commit data...
expvar Loading commit data...
flag Loading commit data...
fmt Loading commit data...
go Loading commit data...
hash Loading commit data...
html Loading commit data...
image Loading commit data...
index/suffixarray Loading commit data...
internal Loading commit data...
io Loading commit data...
log Loading commit data...
math Loading commit data...
mime Loading commit data...
net Loading commit data...
os Loading commit data...
path Loading commit data...
reflect Loading commit data...
regexp Loading commit data...
runtime Loading commit data...
sort Loading commit data...
strconv Loading commit data...
strings Loading commit data...
sync Loading commit data...
syscall Loading commit data...
testing Loading commit data...
text Loading commit data...
time Loading commit data...
unicode Loading commit data...
unsafe Loading commit data...
Make.dist Loading commit data...
all.bash Loading commit data...
all.bat Loading commit data...
all.rc Loading commit data...
androidtest.bash Loading commit data...
bootstrap.bash Loading commit data...
buildall.bash Loading commit data...
clean.bash Loading commit data...
clean.bat Loading commit data...
clean.rc Loading commit data...
iostest.bash Loading commit data...
make.bash Loading commit data...
make.bat Loading commit data...
make.rc Loading commit data...
nacltest.bash Loading commit data...
race.bash Loading commit data...
race.bat Loading commit data...
run.bash Loading commit data...
run.bat Loading commit data...
run.rc Loading commit data...