• Daniel Martí's avatar
    text/template: don't evaluate '.' as a float64 · 0f7b4e72
    Daniel Martí authored
    When using a '.' constant literal as a reflect.Value variadic argument,
    idealConstant would incorrectly result in a float64. This is because
    rune literals can be represented as a float64, and contain a period,
    which tricked the logic into thinking the literal must have been a
    floating point number.
    
    This also happened with other characters that can be part of a floating
    point number, such as 'e' or 'P'.
    
    To fix these edge cases, exit the case sooner if the literal was a rune,
    since that should always go to the int case instead.
    
    Finally, add test cases that verify that they behave properly. These
    would error before, since eq would receive a mix of int and float64,
    which aren't comparable.
    
    Fixes #34483.
    
    Change-Id: Icfcb7803bfa0cf317a1d1adacacad3d69a57eb42
    Reviewed-on: https://go-review.googlesource.com/c/go/+/196808
    Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
    TryBot-Result: Gobot Gobot <gobot@golang.org>
    Reviewed-by: default avatarTom Payne <tom@airmap.com>
    Reviewed-by: default avatarRob Pike <r@golang.org>
    0f7b4e72
exec_test.go 52.1 KB