wgengine/magicsock: fix panic in http debug server

Fixes an panic in `(*magicsock.Conn).ServeHTTPDebug` when the
`recentPongs` ring buffer for an endpoint wraps around.

Signed-off-by: Colin Adler <colin1adler@gmail.com>
(cherry picked from commit 9c8bbc7888)
This commit is contained in:
Colin Adler 2022-06-08 19:22:16 -05:00 committed by Denton Gentry
parent 66cc9e6301
commit 1a4f0f50a7
No known key found for this signature in database

View File

@ -172,6 +172,11 @@ func printEndpointHTML(w io.Writer, ep *endpoint) {
break break
} }
pos := (int(s.recentPong) - i) % len(s.recentPongs) pos := (int(s.recentPong) - i) % len(s.recentPongs)
// If s.recentPongs wraps around pos will be negative, so start
// again from the end of the slice.
if pos < 0 {
pos += len(s.recentPongs)
}
pr := s.recentPongs[pos] pr := s.recentPongs[pos]
fmt.Fprintf(w, "<li>pong %v ago: in %v, from %v src %v</li>\n", fmt.Fprintf(w, "<li>pong %v ago: in %v, from %v src %v</li>\n",
fmtMono(pr.pongAt), pr.latency.Round(time.Millisecond/10), fmtMono(pr.pongAt), pr.latency.Round(time.Millisecond/10),