diff options
author | 2018-04-10 11:20:15 +0000 | |
---|---|---|
committer | 2018-04-10 11:20:15 +0000 | |
commit | b154cc790a92688dfbc26e65385083600b92818b (patch) | |
tree | 6eabe8b8d7a6258dcc0288579ae01ea0eae72254 | |
parent | print rtable for internet sockets unless it's the default; based on a diff (diff) | |
download | wireguard-openbsd-b154cc790a92688dfbc26e65385083600b92818b.tar.xz wireguard-openbsd-b154cc790a92688dfbc26e65385083600b92818b.zip |
A couple of fixes to the : form of SGR. Apparently there is an extra
argument that nobody knew about, so skip that if it exists. Also there
are a bunch of useless optional arguments at the end, so ignore those.
-rw-r--r-- | usr.bin/tmux/input.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/usr.bin/tmux/input.c b/usr.bin/tmux/input.c index 1633848dbab..cfe2577d579 100644 --- a/usr.bin/tmux/input.c +++ b/usr.bin/tmux/input.c @@ -1,4 +1,4 @@ -/* $OpenBSD: input.c,v 1.133 2018/04/06 09:09:38 nicm Exp $ */ +/* $OpenBSD: input.c,v 1.134 2018/04/10 11:20:15 nicm Exp $ */ /* * Copyright (c) 2007 Nicholas Marriott <nicholas.marriott@gmail.com> @@ -1845,10 +1845,12 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) ptr = copy = xstrdup(s); while ((out = strsep(&ptr, ":")) != NULL) { - p[n++] = strtonum(out, 0, INT_MAX, &errstr); - if (errstr != NULL || n == nitems(p)) { - free(copy); - return; + if (*out != '\0') { + p[n++] = strtonum(out, 0, INT_MAX, &errstr); + if (errstr != NULL || n == nitems(p)) { + free(copy); + return; + } } log_debug("%s: %u = %d", __func__, n - 1, p[n - 1]); } @@ -1856,16 +1858,21 @@ input_csi_dispatch_sgr_colon(struct input_ctx *ictx, u_int i) if (n == 0 || (p[0] != 38 && p[0] != 48)) return; - switch (p[1]) { + if (p[1] == -1) + i = 2; + else + i = 1; + switch (p[i]) { case 2: - if (n != 5) + if (n < i + 4) break; - input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[2], p[3], p[4]); + input_csi_dispatch_sgr_rgb_do(ictx, p[0], p[i + 1], p[i + 2], + p[i + 3]); break; case 5: - if (n != 3) + if (n < i + 2) break; - input_csi_dispatch_sgr_256_do(ictx, p[0], p[2]); + input_csi_dispatch_sgr_256_do(ictx, p[0], p[i + 1]); break; } } |