diff options
author | Omar Polo <op@omarpolo.com> | 2022-07-04 09:31:36 +0000 |
---|---|---|
committer | Omar Polo <op@omarpolo.com> | 2022-07-04 09:31:36 +0000 |
commit | f2f8eb35c86c4e1c1d858e782c864deac0511cd3 (patch) | |
tree | 93fa5ddc61c2ade321e1eeeabfe0d50d8b938b4b /server.c | |
parent | 3bd4a6dea08fc977e314877cefed1c6fdd6b1613 (diff) |
encode file names in the directory index
Spotted the hard way by cage
Diffstat (limited to 'server.c')
-rw-r--r-- | server.c | 4 |
1 files changed, 3 insertions, 1 deletions
@@ -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); |