2
0
mirror of https://github.com/soheilhy/cmux.git synced 2024-11-09 19:21:52 +08:00

Fix index out of range in patricia tree

Bug #32 reported that there is an index out of range error. This
issue was introduced in 703b087.

Fix #32 and add a test to detect this issue
This commit is contained in:
Soheil Hassas Yeganeh 2016-07-15 08:07:12 -07:00
parent e85da3027e
commit eddb3b1467
2 changed files with 12 additions and 1 deletions

View File

@ -161,6 +161,10 @@ func (n *ptNode) match(b []byte, prefix bool) bool {
return true return true
} }
if l >= len(b) {
return false
}
nextN, ok := n.next[b[l]] nextN, ok := n.next[b[l]]
if !ok { if !ok {
return false return false

View File

@ -33,6 +33,13 @@ func testPTree(t *testing.T, strs ...string) {
if pt.match(strings.NewReader(s + s)) { if pt.match(strings.NewReader(s + s)) {
t.Errorf("%s matches %s", s+s, s) t.Errorf("%s matches %s", s+s, s)
} }
// The following tests are just to catch index out of
// range and off-by-one errors and not the functionality.
pt.matchPrefix(strings.NewReader(s[:len(s)-1]))
pt.match(strings.NewReader(s[:len(s)-1]))
pt.matchPrefix(strings.NewReader(s + "$"))
pt.match(strings.NewReader(s + "$"))
} }
} }
@ -45,5 +52,5 @@ func TestPatriciaNonOverlapping(t *testing.T) {
} }
func TestPatriciaOverlapping(t *testing.T) { func TestPatriciaOverlapping(t *testing.T) {
testPTree(t, "foo", "far", "farther", "boo", "bar") testPTree(t, "foo", "far", "farther", "boo", "ba", "bar")
} }