diff options
| author | Robert Bielik <robert.bielik@dirac.com> | 2023-08-10 09:28:05 +0200 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2023-08-23 11:25:23 -0700 |
| commit | f5e3a103206988f7b1b012dd42af0238b0df5ce2 (patch) | |
| tree | 73250e66aeab193f7e13c647a2d5462a198a5d82 | |
| parent | db358a8c473c9b6daccace3d89b787b544ef50b7 (diff) | |
| download | nng-f5e3a103206988f7b1b012dd42af0238b0df5ce2.tar.gz nng-f5e3a103206988f7b1b012dd42af0238b0df5ce2.tar.bz2 nng-f5e3a103206988f7b1b012dd42af0238b0df5ce2.zip | |
Skip URI parameters when serving a directory (http_server)
| -rw-r--r-- | src/supplemental/http/http_server.c | 9 | ||||
| -rw-r--r-- | tests/httpserver.c | 22 |
2 files changed, 28 insertions, 3 deletions
diff --git a/src/supplemental/http/http_server.c b/src/supplemental/http/http_server.c index 9a8fd285..6759b859 100644 --- a/src/supplemental/http/http_server.c +++ b/src/supplemental/http/http_server.c @@ -272,7 +272,7 @@ nni_http_handler_set_method(nni_http_handler *h, const char *method) static nni_list http_servers = NNI_LIST_INITIALIZER(http_servers, nni_http_server, node); -static nni_mtx http_servers_lk = NNI_MTX_INITIALIZER; +static nni_mtx http_servers_lk = NNI_MTX_INITIALIZER; static void http_sc_reap(void *arg) @@ -1156,7 +1156,7 @@ nni_http_server_res_error(nni_http_server *s, nni_http_res *res) http_error *epage; char * body = NULL; char * html = NULL; - size_t len = 0; + size_t len = 0; uint16_t code = nni_http_res_get_status(res); int rv; @@ -1550,7 +1550,10 @@ http_handle_dir(nni_aio *aio) } for (uri = uri + len; *uri != '\0'; uri++) { - if (*uri == '/') { + if (*uri == '?') { + // Skip URI parameters + break; + } else if (*uri == '/') { strcpy(dst, NNG_PLATFORM_DIR_SEP); dst += sizeof(NNG_PLATFORM_DIR_SEP) - 1; } else { diff --git a/tests/httpserver.c b/tests/httpserver.c index c593fc81..9c798326 100644 --- a/tests/httpserver.c +++ b/tests/httpserver.c @@ -387,6 +387,24 @@ TestMain("HTTP Server", { nng_free(data, size); }); + Convey("Named file with URI parameters works", { + char fullurl[256]; + void * data; + size_t size; + uint16_t stat; + char * ctype; + + snprintf( + fullurl, sizeof(fullurl), "%s/file.txt?param=123456", urlstr); + So(httpget(fullurl, &data, &size, &stat, &ctype) == 0); + So(stat == NNG_HTTP_STATUS_OK); + So(size == strlen(doc2)); + So(memcmp(data, doc2, size) == 0); + So(strcmp(ctype, "text/plain") == 0); + nni_strfree(ctype); + nng_free(data, size); + }); + Convey("Missing index gives 404", { char fullurl[256]; void * data; @@ -440,6 +458,7 @@ TestMain("HTTP Server", { nng_url_free(curl); nng_free(data, size); }); + Convey("Version 0.9 gives 505", { char fullurl[256]; void * data; @@ -462,6 +481,7 @@ TestMain("HTTP Server", { nng_url_free(curl); nng_free(data, size); }); + Convey("Missing Host gives 400", { char fullurl[256]; void * data; @@ -643,6 +663,7 @@ TestMain("HTTP Server", { nng_url_free(curl); nng_free(data, size); }); + Convey("Version 0.9 gives 505", { char fullurl[256]; void * data; @@ -665,6 +686,7 @@ TestMain("HTTP Server", { nng_url_free(curl); nng_free(data, size); }); + Convey("Missing Host gives 400", { char fullurl[256]; void * data; |
