summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--http/parsing.hpp4
-rw-r--r--meson.build1
-rw-r--r--test/http/parsing_test.cpp32
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