netstat: fix a segfault with --libxo

Fix a segfault when printing the "protocol" field.  The field-format and
encoding-format were expecting different numbers of arguments.

Also, fix the width of the tcp-state field in encoded output.

PR:		292228
Fixes:		c2b08c13c2 netstat: add support for UDP-Lite endpoints
MFC after:	1 week
Sponsored by:	ConnectWise
Reviewed by:	tuexen, js, des
Differential Revision: https://reviews.freebsd.org/D54567
This commit is contained in:
Alan Somers 2026-01-06 15:19:57 -07:00
parent d07198ff72
commit 3b6615ec03

View file

@ -394,11 +394,10 @@ protopr(u_long off, const char *name, int af1, int proto)
if (istcp && (tp->t_flags & TF_TOE) != 0)
xo_emit("{:protocol/%-3.3s%-6.6s/%s%s} ", "toe", vchar);
else {
int len;
int l = max (2, 9 - strlen(name));
len = max (2, 9 - strlen(name));
xo_emit("{:protocol/%.7s%-*.*s/%s%s} ", name, len, len,
vchar);
xo_emit("{d:protocol/%.7s%-*.*s} ", name, l, l, vchar);
xo_emit("{e:protocol/%s%s}", name, vchar);
}
if (Lflag) {
char buf1[33];
@ -523,9 +522,9 @@ protopr(u_long off, const char *name, int af1, int proto)
}
if (istcp && !Lflag && !xflag && !Tflag && !Rflag) {
if (tp->t_state < 0 || tp->t_state >= TCP_NSTATES)
xo_emit("{:tcp-state/%-11d}", tp->t_state);
xo_emit("{:tcp-state/%-11d/%d}", tp->t_state);
else {
xo_emit("{:tcp-state/%-11s}",
xo_emit("{:tcp-state/%-11s/%s}",
tcpstates[tp->t_state]);
#if defined(TF_NEEDSYN) && defined(TF_NEEDFIN)
/* Show T/TCP `hidden state' */