commit | 3f89d3eb33bbd9d58a6ea861e6f505acfb556559 | [log] [tgz] |
---|---|---|
author | Andrew Gerrand <adg@golang.org> | Mon Aug 12 12:08:11 2013 +1000 |
committer | Andrew Gerrand <adg@golang.org> | Mon Aug 12 12:08:11 2013 +1000 |
tree | 6a479b869f3ba8fab3bf0c71b7b38060b2b659bb | |
parent | b3105e2311a593b18daaa658c1ff250fee760050 [diff] |
fix overflow in peer selection
diff --git a/http.go b/http.go index db3ac59..e1fde7f 100644 --- a/http.go +++ b/http.go
@@ -90,7 +90,11 @@ if len(p.peers) == 0 { return nil, false } - if peer := p.peers[int(h)%len(p.peers)]; peer != p.self { + n := int(h) + if n < 0 { + n *= -1 + } + if peer := p.peers[n%len(p.peers)]; peer != p.self { // TODO: pre-build a slice of *httpGetter when Set() // is called to avoid these two allocations. return &httpGetter{p.Transport, peer + p.basePath}, true