Skip to content

Commit 166267c

Browse files
nicmnicm
authored andcommitted
Allow :. in names again, forbidding them is overly pernickety. Only
forbid invalid UTF-8 and #(.
1 parent 132a63d commit 166267c

12 files changed

Lines changed: 35 additions & 63 deletions

cmd-break-pane.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item)
6262
int idx = target->idx, before;
6363
const char *template, *name = args_get(args, 'n');
6464

65-
if (name != NULL && !check_name(name, WINDOW_NAME_FORBID)) {
65+
if (name != NULL && !check_name(name)) {
6666
cmdq_error(item, "invalid window name: %s", name);
6767
return (CMD_RETURN_ERROR);
6868
}
@@ -86,7 +86,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item)
8686
return (CMD_RETURN_ERROR);
8787
}
8888
if (name != NULL) {
89-
window_set_name(w, name, WINDOW_NAME_FORBID);
89+
window_set_name(w, name, 0);
9090
options_set_number(w->options, "automatic-rename", 0);
9191
}
9292
server_unlink_window(src_s, wl);
@@ -116,7 +116,7 @@ cmd_break_pane_exec(struct cmd *self, struct cmdq_item *item)
116116

117117
if (name == NULL) {
118118
newname = default_window_name(w);
119-
window_set_name(w, newname, WINDOW_NAME_FORBID);
119+
window_set_name(w, newname, 0);
120120
free(newname);
121121
} else {
122122
window_set_name(w, name, 0);

cmd-new-session.c

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -101,22 +101,22 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item)
101101

102102
if ((tmp = args_get(args, 'n')) != NULL) {
103103
ename = format_single(item, tmp, c, NULL, NULL, NULL);
104-
if (!check_name(ename, WINDOW_NAME_FORBID)) {
104+
if (!check_name(ename)) {
105105
cmdq_error(item, "invalid window name: %s", ename);
106106
free(ename);
107107
return (CMD_RETURN_ERROR);
108108
}
109-
wname = clean_name(ename, WINDOW_NAME_FORBID);
109+
wname = clean_name(ename, 0);
110110
free(ename);
111111
}
112112
if ((tmp = args_get(args, 's')) != NULL) {
113113
ename = format_single(item, tmp, c, NULL, NULL, NULL);
114-
if (!check_name(ename, SESSION_NAME_FORBID)) {
114+
if (!check_name(ename)) {
115115
cmdq_error(item, "invalid session name: %s", ename);
116116
free(ename);
117117
goto fail;
118118
}
119-
sname = clean_name(ename, SESSION_NAME_FORBID);
119+
sname = clean_name(ename, 0);
120120
free(ename);
121121
}
122122
if (args_has(args, 'A')) {
@@ -152,12 +152,12 @@ cmd_new_session_exec(struct cmd *self, struct cmdq_item *item)
152152
else if (groupwith != NULL)
153153
prefix = xstrdup(groupwith->name);
154154
else {
155-
if (!check_name(group, SESSION_NAME_FORBID)) {
155+
if (!check_name(group)) {
156156
cmdq_error(item,
157157
"invalid session group name: %s", group);
158158
goto fail;
159159
}
160-
prefix = clean_name(group, SESSION_NAME_FORBID);
160+
prefix = clean_name(group, 0);
161161
}
162162
}
163163

cmd-new-window.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,12 +73,12 @@ cmd_new_window_exec(struct cmd *self, struct cmdq_item *item)
7373
name = args_get(args, 'n');
7474
if (name != NULL) {
7575
expanded = format_single(item, name, c, s, NULL, NULL);
76-
if (!check_name(expanded, WINDOW_NAME_FORBID)) {
76+
if (!check_name(expanded)) {
7777
cmdq_error(item, "invalid window name: %s", expanded);
7878
free(expanded);
7979
return (CMD_RETURN_ERROR);
8080
}
81-
wname = clean_name(expanded, WINDOW_NAME_FORBID);
81+
wname = clean_name(expanded, 0);
8282
free(expanded);
8383
}
8484
if (args_has(args, 'S') && wname != NULL && target->idx == -1) {

cmd-rename-session.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,12 +52,12 @@ cmd_rename_session_exec(struct cmd *self, struct cmdq_item *item)
5252
char *newname, *tmp;
5353

5454
tmp = format_single_from_target(item, args_string(args, 0));
55-
if (!check_name(tmp, SESSION_NAME_FORBID)) {
55+
if (!check_name(tmp)) {
5656
cmdq_error(item, "invalid session name: %s", tmp);
5757
free(tmp);
5858
return (CMD_RETURN_ERROR);
5959
}
60-
newname = clean_name(tmp, SESSION_NAME_FORBID);
60+
newname = clean_name(tmp, 0);
6161
free(tmp);
6262
if (strcmp(newname, s->name) == 0) {
6363
free(newname);

cmd-rename-window.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ cmd_rename_window_exec(struct cmd *self, struct cmdq_item *item)
5151
char *name;
5252

5353
name = format_single_from_target(item, args_string(args, 0));
54-
if (!check_name(name, WINDOW_NAME_FORBID)) {
54+
if (!check_name(name)) {
5555
cmdq_error(item, "invalid window name: %s", name);
5656
free(name);
5757
return (CMD_RETURN_ERROR);
5858
}
5959

60-
window_set_name(wl->window, name, WINDOW_NAME_FORBID);
60+
window_set_name(wl->window, name, 0);
6161
options_set_number(wl->window->options, "automatic-rename", 0);
6262
free(name);
6363

input.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1953,16 +1953,14 @@ input_csi_dispatch_rm_private(struct input_ctx *ictx)
19531953
case 2004:
19541954
screen_write_mode_clear(sctx, MODE_BRACKETPASTE);
19551955
break;
1956+
case 2026:
1957+
screen_write_stop_sync(ictx->wp);
1958+
break;
19561959
case 2031:
19571960
screen_write_mode_clear(sctx, MODE_THEME_UPDATES);
19581961
if (ictx->wp != NULL)
19591962
ictx->wp->flags &= ~PANE_THEMECHANGED;
19601963
break;
1961-
case 2026: /* synchronized output */
1962-
screen_write_stop_sync(ictx->wp);
1963-
if (ictx->wp != NULL)
1964-
ictx->wp->flags |= PANE_REDRAW;
1965-
break;
19661964
default:
19671965
log_debug("%s: unknown '%c'", __func__, ictx->ch);
19681966
break;
@@ -2065,7 +2063,7 @@ input_csi_dispatch_sm_private(struct input_ctx *ictx)
20652063
ictx->wp->flags &= ~PANE_THEMECHANGED;
20662064
}
20672065
break;
2068-
case 2026: /* synchronized output */
2066+
case 2026:
20692067
screen_write_start_sync(ictx->wp);
20702068
break;
20712069
default:
@@ -2822,10 +2820,10 @@ input_exit_rename(struct input_ctx *ictx)
28222820
if (o != NULL)
28232821
options_remove_or_default(o, -1, NULL);
28242822
if (!options_get_number(w->options, "automatic-rename"))
2825-
window_set_name(w, "", WINDOW_NAME_FORBID_EXT);
2823+
window_set_name(w, "", 1);
28262824
} else {
28272825
options_set_number(w->options, "automatic-rename", 0);
2828-
window_set_name(w, ictx->input_buf, WINDOW_NAME_FORBID_EXT);
2826+
window_set_name(w, ictx->input_buf, 1);
28292827
}
28302828
server_redraw_window_borders(w);
28312829
server_status_window(w);

names.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ check_window_name(struct window *w)
9595
name = format_window_name(w);
9696
if (strcmp(name, w->name) != 0) {
9797
log_debug("@%u new name %s (was %s)", w->id, name, w->name);
98-
window_set_name(w, name, WINDOW_NAME_FORBID_EXT);
98+
window_set_name(w, name, 1);
9999
server_redraw_window_borders(w);
100100
server_status_window(w);
101101
} else
@@ -166,7 +166,7 @@ parse_window_name(const char *in)
166166

167167
if (*name == '/')
168168
name = basename(name);
169-
name = clean_name(name, WINDOW_NAME_FORBID);
169+
name = clean_name(name, 0);
170170
free(copy);
171171
if (name == NULL)
172172
return (xstrdup(""));

paste.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ paste_rename(const char *oldname, const char *newname, char **cause)
219219
return (-1);
220220
}
221221

222-
name = clean_name(newname, "");
222+
name = clean_name(newname, 0);
223223
if (name == NULL) {
224224
if (cause != NULL)
225225
xasprintf(cause, "invalid buffer name: %s", newname);
@@ -287,7 +287,7 @@ paste_set(char *data, size_t size, const char *name, char **cause)
287287
return (-1);
288288
}
289289

290-
newname = clean_name(name, "");
290+
newname = clean_name(name, 0);
291291
if (newname == NULL) {
292292
if (cause != NULL)
293293
xasprintf(cause, "invalid buffer name: %s", name);

screen.c

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -249,10 +249,7 @@ screen_set_title(struct screen *s, const char *title, int untrusted)
249249
{
250250
char *new_title;
251251

252-
if (untrusted)
253-
new_title = clean_name(title, "#");
254-
else
255-
new_title = clean_name(title, "");
252+
new_title = clean_name(title, untrusted);
256253
if (new_title == NULL)
257254
return (0);
258255
free(s->title);
@@ -266,10 +263,7 @@ screen_set_path(struct screen *s, const char *path, int untrusted)
266263
{
267264
char *new_path;
268265

269-
if (untrusted)
270-
new_path = clean_name(path, "#");
271-
else
272-
new_path = clean_name(path, "");
266+
new_path = clean_name(path, untrusted);
273267
if (new_path == NULL)
274268
return (0);
275269
free(s->path);

tmux.c

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -282,41 +282,27 @@ get_timer(void)
282282
}
283283

284284
char *
285-
clean_name(const char *name, const char* forbid)
285+
clean_name(const char *name, int untrusted)
286286
{
287287
char *copy, *cp, *new_name;
288288

289289
if (!utf8_isvalid(name))
290290
return (NULL);
291291
copy = xstrdup(name);
292292
for (cp = copy; *cp != '\0'; cp++) {
293-
if (*cp == '#' && strchr(forbid, '#') != NULL) {
294-
if (cp[1] == '(')
295-
*cp = '_';
296-
} else if (strchr(forbid, *cp) != NULL)
293+
if (untrusted && cp[0] == '#' && cp[1] == '(')
297294
*cp = '_';
298295
}
299296
utf8_stravis(&new_name, copy, VIS_OCTAL|VIS_CSTYLE|VIS_TAB|VIS_NL);
300297
free(copy);
301298
return (new_name);
302299
}
303300

304-
/*
305-
* Check a name given by a command: reject it if it is empty, not valid UTF-8,
306-
* or contains a forbidden character. Other characters that clean_name would
307-
* change (for example with utf8_stravis) are allowed and fixed silently.
308-
*/
309301
int
310-
check_name(const char *name, const char *forbid)
302+
check_name(const char *name)
311303
{
312-
const char *cp;
313-
314304
if (!utf8_isvalid(name))
315305
return (0);
316-
for (cp = name; *cp != '\0'; cp++) {
317-
if (strchr(forbid, *cp) != NULL)
318-
return (0);
319-
}
320306
return (1);
321307
}
322308

0 commit comments

Comments
 (0)