diff --git a/src/request.c b/src/request.c index 24662020..c3c86c6a 100644 --- a/src/request.c +++ b/src/request.c @@ -450,12 +450,25 @@ int http_request_parse(server *srv, connection *con) { /* check uri for invalid characters */ for (j = 0; j < con->request.uri->used - 1; j++) { if (!request_uri_is_valid_char(con->request.uri->ptr[j])) { + unsigned char buf[2]; con->http_status = 400; con->keep_alive = 0; - log_error_write(srv, __FILE__, __LINE__, "sd", - "invalid character in URI -> 400", - con->request.uri->ptr[j]); + buf[0] = con->request.uri->ptr[j]; + buf[1] = '\0'; + + if (con->request.uri->ptr[j] > 32 && + con->request.uri->ptr[j] != 127) { + /* the character is printable -> print it */ + log_error_write(srv, __FILE__, __LINE__, "ss", + "invalid character in URI -> 400", + buf); + } else { + /* a control-character, print ascii-code */ + log_error_write(srv, __FILE__, __LINE__, "sd", + "invalid character in URI -> 400", + con->request.uri->ptr[j]); + } if (srv->srvconf.log_request_header_on_error) { log_error_write(srv, __FILE__, __LINE__, "Sb",