Commit 94f49fd4 authored by Hiroshi Ioka's avatar Hiroshi Ioka Committed by Brad Fitzpatrick

unicode: panic if given rune is negative in SimpleFold

Fixes #16690

Change-Id: I6db588c4b0f23c5ec6bc9b85a488b60fab3f2f13
Reviewed-on: https://go-review.googlesource.com/30892Reviewed-by: 's avatarBrad Fitzpatrick <bradfitz@golang.org>
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent be302e6d
...@@ -332,6 +332,10 @@ type foldPair struct { ...@@ -332,6 +332,10 @@ type foldPair struct {
// SimpleFold('1') = '1' // SimpleFold('1') = '1'
// //
func SimpleFold(r rune) rune { func SimpleFold(r rune) rune {
if r < 0 {
panic("unicode: negative rune is disallowed")
}
if int(r) < len(asciiFold) { if int(r) < len(asciiFold) {
return rune(asciiFold[r]) return rune(asciiFold[r])
} }
......
...@@ -434,6 +434,20 @@ func TestSimpleFold(t *testing.T) { ...@@ -434,6 +434,20 @@ func TestSimpleFold(t *testing.T) {
} }
} }
func TestSimpleFoldPanic(t *testing.T) {
got := func() (r interface{}) {
defer func() { r = recover() }()
SimpleFold(-1)
return nil
}()
want := "unicode: negative rune is disallowed"
s, _ := got.(string)
if s != want {
t.Errorf("SimpleFold(-1) should panic, got: %q, want: %q", got, want)
}
}
// Running 'go test -calibrate' runs the calibration to find a plausible // Running 'go test -calibrate' runs the calibration to find a plausible
// cutoff point for linear search of a range list vs. binary search. // cutoff point for linear search of a range list vs. binary search.
// We create a fake table and then time how long it takes to do a // We create a fake table and then time how long it takes to do a
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment