=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/tmux/cmd-load-buffer.c,v retrieving revision 1.34 retrieving revision 1.35 diff -c -r1.34 -r1.35 *** src/usr.bin/tmux/cmd-load-buffer.c 2015/06/05 18:06:30 1.34 --- src/usr.bin/tmux/cmd-load-buffer.c 2015/10/31 08:13:58 1.35 *************** *** 1,4 **** ! /* $OpenBSD: cmd-load-buffer.c,v 1.34 2015/06/05 18:06:30 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha --- 1,4 ---- ! /* $OpenBSD: cmd-load-buffer.c,v 1.35 2015/10/31 08:13:58 nicm Exp $ */ /* * Copyright (c) 2009 Tiago Cunha *************** *** 49,58 **** struct client *c = cmdq->client; struct session *s; FILE *f; ! const char *path, *bufname; ! char *pdata, *new_pdata, *cause; size_t psize; ! int ch, error, cwd, fd; bufname = NULL; if (args_has(args, 'b')) --- 49,58 ---- struct client *c = cmdq->client; struct session *s; FILE *f; ! const char *path, *bufname, *cwd; ! char *pdata, *new_pdata, *cause, *file, resolved[PATH_MAX]; size_t psize; ! int ch, error; bufname = NULL; if (args_has(args, 'b')) *************** *** 75,87 **** else if ((s = cmd_find_current(cmdq)) != NULL) cwd = s->cwd; else ! cwd = AT_FDCWD; ! if ((fd = openat(cwd, path, O_RDONLY)) == -1 || ! (f = fdopen(fd, "rb")) == NULL) { ! if (fd != -1) ! close(fd); ! cmdq_error(cmdq, "%s: %s", path, strerror(errno)); return (CMD_RETURN_ERROR); } --- 75,90 ---- else if ((s = cmd_find_current(cmdq)) != NULL) cwd = s->cwd; else ! cwd = "."; ! xasprintf(&file, "%s/%s", cwd, path); ! if (realpath(file, resolved) == NULL) ! f = NULL; ! else ! f = fopen(resolved, "rb"); ! free(file); ! if (f == NULL) { ! cmdq_error(cmdq, "%s: %s", resolved, strerror(errno)); return (CMD_RETURN_ERROR); } *************** *** 97,103 **** pdata[psize++] = ch; } if (ferror(f)) { ! cmdq_error(cmdq, "%s: read error", path); goto error; } if (pdata != NULL) --- 100,106 ---- pdata[psize++] = ch; } if (ferror(f)) { ! cmdq_error(cmdq, "%s: read error", resolved); goto error; } if (pdata != NULL)