diff --git a/ipn/ipnlocal/peerapi.go b/ipn/ipnlocal/peerapi.go
index 49d646d4b..7fd2ed443 100644
--- a/ipn/ipnlocal/peerapi.go
+++ b/ipn/ipnlocal/peerapi.go
@@ -725,18 +725,20 @@ func (h *peerAPIHandler) handleServeInterfaces(w http.ResponseWriter, r *http.Re
http.Error(w, "denied; no debug access", http.StatusForbidden)
return
}
- i, err := interfaces.GetList()
- if err != nil {
- http.Error(w, err.Error(), 500)
+ w.Header().Set("Content-Type", "text/html; charset=utf-8")
+ fmt.Fprintln(w, "
Interfaces
")
+
+ if dr, err := interfaces.DefaultRoute(); err == nil {
+ fmt.Fprintf(w, "Default route is %q(%d)
\n", html.EscapeString(dr.InterfaceName), dr.InterfaceIndex)
+ } else {
+ fmt.Fprintf(w, "Could not get the default route: %s
\n", html.EscapeString(err.Error()))
}
- dr, err := interfaces.DefaultRoute()
+ i, err := interfaces.GetList()
if err != nil {
- http.Error(w, err.Error(), 500)
+ fmt.Fprintf(w, "Could not get interfaces: %s\n", html.EscapeString(err.Error()))
+ return
}
- w.Header().Set("Content-Type", "text/html; charset=utf-8")
- fmt.Fprintln(w, "Interfaces
")
- fmt.Fprintf(w, "Default route is %q(%d)
\n", dr.InterfaceName, dr.InterfaceIndex)
fmt.Fprintln(w, "")
fmt.Fprint(w, "")
@@ -747,7 +749,7 @@ func (h *peerAPIHandler) handleServeInterfaces(w http.ResponseWriter, r *http.Re
i.ForeachInterface(func(iface interfaces.Interface, ipps []netip.Prefix) {
fmt.Fprint(w, "
")
for _, v := range []any{iface.Index, iface.Name, iface.MTU, iface.Flags, ipps} {
- fmt.Fprintf(w, "%v | ", v)
+ fmt.Fprintf(w, "%s | ", html.EscapeString(fmt.Sprintf("%v", v)))
}
fmt.Fprint(w, "
\n")
})