diff options
author | nicm <nicm> | 2020-05-16 14:49:50 +0000 |
---|---|---|
committer | nicm <nicm> | 2020-05-16 14:49:50 +0000 |
commit | 428137d8765f6aeb56503d8d37e3b1c9b33994ce (patch) | |
tree | 29ef6519ac863f068919a8c72b5a65296ef1aa6f /session.c | |
parent | 7dbe623156e7b0e32e10e5e6445b7b7e448cc3a2 (diff) | |
download | rtmux-428137d8765f6aeb56503d8d37e3b1c9b33994ce.tar.gz rtmux-428137d8765f6aeb56503d8d37e3b1c9b33994ce.tar.bz2 rtmux-428137d8765f6aeb56503d8d37e3b1c9b33994ce.zip |
Instead of forbidding invalid session names, sanitize them like window
names.
Diffstat (limited to 'session.c')
-rw-r--r-- | session.c | 19 |
1 files changed, 14 insertions, 5 deletions
@@ -23,6 +23,7 @@ #include <string.h> #include <stdlib.h> #include <unistd.h> +#include <vis.h> #include <time.h> #include "tmux.h" @@ -123,7 +124,6 @@ session_create(const char *prefix, const char *name, const char *cwd, s->cwd = xstrdup(cwd); - s->curw = NULL; TAILQ_INIT(&s->lastw); RB_INIT(&s->windows); @@ -142,7 +142,6 @@ session_create(const char *prefix, const char *name, const char *cwd, s->name = xstrdup(name); s->id = next_session_id++; } else { - s->name = NULL; do { s->id = next_session_id++; free(s->name); @@ -232,11 +231,20 @@ session_destroy(struct session *s, int notify, const char *from) session_remove_ref(s, __func__); } -/* Check a session name is valid: not empty and no colons or periods. */ -int +/* Sanitize session name. */ +char * session_check_name(const char *name) { - return (*name != '\0' && name[strcspn(name, ":.")] == '\0'); + char *copy, *cp, *new_name; + + copy = xstrdup(name); + for (cp = copy; *cp != '\0'; cp++) { + if (*cp == ':' || *cp == '.') + *cp = '_'; + } + utf8_stravis(&new_name, copy, VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL); + free(copy); + return (new_name); } /* Lock session if it has timed out. */ @@ -556,6 +564,7 @@ session_group_remove(struct session *s) TAILQ_REMOVE(&sg->sessions, s, gentry); if (TAILQ_EMPTY(&sg->sessions)) { RB_REMOVE(session_groups, &session_groups, sg); + free((void *)sg->name); free(sg); } } |