Merge pull request #411 from danielskeenan/#410

Handle unknown static file extensions
This commit is contained in:
Igor Mróz 2022-04-22 09:18:25 +02:00 committed by GitHub
commit 3a9776b27e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 36 additions and 10 deletions

View File

@ -242,17 +242,20 @@ namespace crow
{
std::size_t last_dot = path.find_last_of(".");
std::string extension = path.substr(last_dot + 1);
std::string mimeType = "";
code = 200;
this->add_header("Content-length", std::to_string(file_info.statbuf.st_size));
this->add_header("Content-Length", std::to_string(file_info.statbuf.st_size));
if (extension != "")
if (!extension.empty())
{
mimeType = mime_types.at(extension);
if (mimeType != "")
this->add_header("Content-Type", mimeType);
const auto mimeType = mime_types.find(extension);
if (mimeType != mime_types.end())
{
this->add_header("Content-Type", mimeType->second);
}
else
this->add_header("content-Type", "text/plain");
{
this->add_header("Content-Type", "text/plain");
}
}
}
else

View File

@ -0,0 +1 @@
Test file with a strange extension.

View File

@ -1926,8 +1926,10 @@ TEST_CASE("multipart")
TEST_CASE("send_file")
{
struct stat statbuf;
stat("tests/img/cat.jpg", &statbuf);
struct stat statbuf_cat;
stat("tests/img/cat.jpg", &statbuf_cat);
struct stat statbuf_badext;
stat("tests/img/filewith.badext", &statbuf_badext);
SimpleApp app;
@ -1944,6 +1946,12 @@ TEST_CASE("send_file")
res.end();
});
CROW_ROUTE(app, "/filewith.badext")
([](const crow::request&, crow::response& res) {
res.set_static_file_info("tests/img/filewith.badext");
res.end();
});
app.validate();
//File not found check
@ -1971,7 +1979,21 @@ TEST_CASE("send_file")
CHECK(200 == res.code);
CHECK("image/jpeg" == res.headers.find("Content-Type")->second);
CHECK(to_string(statbuf.st_size) == res.headers.find("Content-Length")->second);
CHECK(to_string(statbuf_cat.st_size) == res.headers.find("Content-Length")->second);
}
//Unknown extension check
{
request req;
response res;
req.url = "/filewith.badext";
req.http_ver_major = 1;
CHECK_NOTHROW(app.handle(req, res));
CHECK(200 == res.code);
CHECK("text/plain" == res.headers.find("Content-Type")->second);
CHECK(to_string(statbuf_badext.st_size) == res.headers.find("Content-Length")->second);
}
} // send_file