Fix a crash when completing sessions, from Anindya Mukherjee.

This commit is contained in:
nicm 2020-06-11 10:56:19 +00:00
parent 50ee41423f
commit cf13d1e110
1 changed files with 17 additions and 6 deletions

View File

@ -1441,6 +1441,8 @@ status_prompt_complete_prefix(char **list, u_int size)
u_int i; u_int i;
size_t j; size_t j;
if (list == NULL || size == 0)
return (NULL);
out = xstrdup(list[0]); out = xstrdup(list[0]);
for (i = 1; i < size; i++) { for (i = 1; i < size; i++) {
j = strlen(list[i]); j = strlen(list[i]);
@ -1649,13 +1651,22 @@ status_prompt_complete_session(char ***list, u_int *size, const char *s,
char flag) char flag)
{ {
struct session *loop; struct session *loop;
char *out, *tmp; char *out, *tmp, n[11];
RB_FOREACH(loop, sessions, &sessions) { RB_FOREACH(loop, sessions, &sessions) {
if (*s != '\0' && strncmp(loop->name, s, strlen(s)) != 0) if (*s == '\0' || strncmp(loop->name, s, strlen(s)) == 0) {
continue; *list = xreallocarray(*list, (*size) + 2,
*list = xreallocarray(*list, (*size) + 2, sizeof **list); sizeof **list);
xasprintf(&(*list)[(*size)++], "%s:", loop->name); xasprintf(&(*list)[(*size)++], "%s:", loop->name);
} else if (*s == '$') {
xsnprintf(n, sizeof n, "%u", loop->id);
if (s[1] == '\0' ||
strncmp(n, s + 1, strlen(s) - 1) == 0) {
*list = xreallocarray(*list, (*size) + 2,
sizeof **list);
xasprintf(&(*list)[(*size)++], "$%s:", n);
}
}
} }
out = status_prompt_complete_prefix(*list, *size); out = status_prompt_complete_prefix(*list, *size);
if (out != NULL && flag != '\0') { if (out != NULL && flag != '\0') {