aboutsummaryrefslogtreecommitdiff
path: root/server.c
diff options
context:
space:
mode:
authorOmar Polo <op@omarpolo.com>2022-07-04 09:31:36 +0000
committerOmar Polo <op@omarpolo.com>2022-07-04 09:31:36 +0000
commitf2f8eb35c86c4e1c1d858e782c864deac0511cd3 (patch)
tree93fa5ddc61c2ade321e1eeeabfe0d50d8b938b4b /server.c
parent3bd4a6dea08fc977e314877cefed1c6fdd6b1613 (diff)
encode file names in the directory index
Spotted the hard way by cage
Diffstat (limited to 'server.c')
-rw-r--r--server.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/server.c b/server.c
index c69c13d..27227dd 100644
--- a/server.c
+++ b/server.c
@@ -1070,6 +1070,7 @@ client_write(struct bufferevent *bev, void *d)
{
struct client *c = d;
struct evbuffer *out = EVBUFFER_OUTPUT(bev);
+ char nam[PATH_MAX];
char buf[BUFSIZ];
ssize_t r;
@@ -1097,8 +1098,9 @@ client_write(struct bufferevent *bev, void *d)
case REQUEST_DIR:
/* TODO: handle big big directories better */
for (c->diroff = 0; c->diroff < c->dirlen; ++c->diroff) {
- evbuffer_add_printf(out, "=> %s\n",
+ encode_path(nam, sizeof(nam),
c->dir[c->diroff]->d_name);
+ evbuffer_add_printf(out, "=> ./%s\n", nam);
free(c->dir[c->diroff]);
}
free(c->dir);