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.
pull/1298/merge
nicm 2018-04-10 11:20:15 +00:00
parent c6975b3bb4
commit 051a29ca03
1 changed files with 16 additions and 9 deletions

25
input.c
View File

@ -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;
}
}