kore

a fork of the worlds most advanced web framework
Log | Files | Refs | README | LICENSE

commit 04deeeafb993bc8652eebcbdcfd76d5a06081858
parent 5eb2160269e4ba620417df0213363303161ac9fa
Author: Joris Vink <joris@coders.se>
Date:   Sun,  8 Jul 2018 15:57:00 +0000

make sure we can still resolve new paths

Diffstat:
Msrc/filemap.c | 26++++++++++++++++++++++++--
1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/filemap.c b/src/filemap.c @@ -177,8 +177,30 @@ filemap_serve(struct http_request *req, struct filemap_entry *map) index = 0; lookup: - if (realpath(fpath, rpath) == NULL || - strncmp(rpath, fpath, map->ondisk_len)) { + if (realpath(fpath, rpath) == NULL) { + if (errno == ENOENT) { + if (index || kore_filemap_ext == NULL) { + req->status = HTTP_STATUS_NOT_FOUND; + } else { + len = snprintf(fpath, sizeof(fpath), + "%s/%s%s", map->ondisk, path, + kore_filemap_ext); + if (len == -1 || + (size_t)len >= sizeof(fpath)) { + http_response(req, + HTTP_STATUS_INTERNAL_ERROR, + NULL, 0); + return; + } + index++; + goto lookup; + } + } + http_response(req, HTTP_STATUS_NOT_FOUND, NULL, 0); + return; + } + + if (strncmp(rpath, fpath, map->ondisk_len)) { http_response(req, HTTP_STATUS_NOT_FOUND, NULL, 0); return; }