diff options
-rw-r--r-- | http/parsing.hpp | 4 | ||||
-rw-r--r-- | meson.build | 1 | ||||
-rw-r--r-- | test/http/parsing_test.cpp | 32 |
3 files changed, 36 insertions, 1 deletions
diff --git a/http/parsing.hpp b/http/parsing.hpp index 9a19baf452..cf813537ed 100644 --- a/http/parsing.hpp +++ b/http/parsing.hpp @@ -20,7 +20,9 @@ enum class JsonParseResult inline bool isJsonContentType(std::string_view contentType) { return bmcweb::asciiIEquals(contentType, "application/json") || - bmcweb::asciiIEquals(contentType, "application/json; charset=utf-8"); + bmcweb::asciiIEquals(contentType, + "application/json; charset=utf-8") || + bmcweb::asciiIEquals(contentType, "application/json;charset=utf-8"); } inline JsonParseResult parseRequestAsJson(const crow::Request& req, diff --git a/meson.build b/meson.build index 487ec1f07f..2d5f00e8d5 100644 --- a/meson.build +++ b/meson.build @@ -426,6 +426,7 @@ srcfiles_unittest = files( 'test/http/http_connection_test.cpp', 'test/http/mutual_tls.cpp', 'test/http/router_test.cpp', + 'test/http/parsing_test.cpp', 'test/http/http_response_test.cpp', 'test/http/utility_test.cpp', 'test/http/verb_test.cpp', diff --git a/test/http/parsing_test.cpp b/test/http/parsing_test.cpp new file mode 100644 index 0000000000..e51e89cf98 --- /dev/null +++ b/test/http/parsing_test.cpp @@ -0,0 +1,32 @@ +#include "http/parsing.hpp" + +#include <gtest/gtest.h> + +namespace +{ + +TEST(HttpParsing, isJsonContentType) +{ + EXPECT_TRUE(isJsonContentType("application/json")); + + // The Redfish specification DSP0266 shows no space between the ; and + // charset. + EXPECT_TRUE(isJsonContentType("application/json;charset=utf-8")); + + // Sites like mozilla show the space included [1] + // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type + EXPECT_TRUE(isJsonContentType("application/json; charset=utf-8")); + + EXPECT_TRUE(isJsonContentType("APPLICATION/JSON")); + EXPECT_TRUE(isJsonContentType("APPLICATION/JSON; CHARSET=UTF-8")); + EXPECT_TRUE(isJsonContentType("APPLICATION/JSON;CHARSET=UTF-8")); + + EXPECT_FALSE(isJsonContentType("application/xml")); + EXPECT_FALSE(isJsonContentType("")); + EXPECT_FALSE(isJsonContentType(";")); + EXPECT_FALSE(isJsonContentType("application/json;")); + EXPECT_FALSE(isJsonContentType("application/json; ")); + EXPECT_FALSE(isJsonContentType("application/json; charset=ascii")); + EXPECT_FALSE(isJsonContentType("json")); +} +} // namespace |