diff options
author | Sergey Poznyakoff <gray@gnu.org> | 2018-02-13 22:21:52 +0200 |
---|---|---|
committer | Sergey Poznyakoff <gray@gnu.org> | 2018-02-13 22:21:52 +0200 |
commit | e8d8cbf292c9fbc041c346859916db9e7367d4bb (patch) | |
tree | 86ba3a1495f3105cccbaaaff1b68fe2ab924d692 | |
parent | a60c099c902411f27e93d7aac2323b99696d1a92 (diff) | |
download | fileserv-e8d8cbf292c9fbc041c346859916db9e7367d4bb.tar.gz fileserv-e8d8cbf292c9fbc041c346859916db9e7367d4bb.tar.bz2 |
Bugfixes
-rw-r--r-- | src/dirconfig.c | 2 | ||||
-rw-r--r-- | src/fileserv.c | 14 |
2 files changed, 12 insertions, 4 deletions
diff --git a/src/dirconfig.c b/src/dirconfig.c index 6cf0a37..d40475d 100644 --- a/src/dirconfig.c +++ b/src/dirconfig.c @@ -311,3 +311,3 @@ filename_is_valid(char const *name) } - return state != s_err; + return state == s_end; } diff --git a/src/fileserv.c b/src/fileserv.c index 8f18b92..a7e0bc2 100644 --- a/src/fileserv.c +++ b/src/fileserv.c @@ -370,3 +370,3 @@ make_location(char const *proto, char const *host, char const *url) len++; - buf = malloc(len); + buf = malloc(len + 1); if (buf) { @@ -401,2 +401,9 @@ get_sort_ord(struct MHD_Connection *conn) +static char const * +basename(char const *s) +{ + char *p = strrchr(s, '/'); + return p ? p + 1 : s; +} + int @@ -418,3 +425,4 @@ get_file_resp(struct MHD_Connection *conn, char const *url, FILE_RESP *resp) return MHD_HTTP_NOT_FOUND; - resp->file_name = catfile_n(map->dir, map->dir_len, url + map->uri_len); + resp->file_name = catfile_n(map->dir, map->dir_len, + url + map->uri_len); if (lstat(resp->file_name, &resp->st)) @@ -424,3 +432,3 @@ get_file_resp(struct MHD_Connection *conn, char const *url, FILE_RESP *resp) - if (filename_is_hidden(resp->file_name, resp->conf)) + if (filename_is_hidden(basename(resp->file_name), resp->conf)) return MHD_HTTP_NOT_FOUND; |