From 79d9fdc0161214b2084744a15b200996a7428fc9 Mon Sep 17 00:00:00 2001
From: Niels <niels.lohmann@gmail.com>
Date: Sat, 22 Oct 2016 18:57:58 +0200
Subject: [PATCH] user-defined string literals exploit string length (#340)

---
 src/json.hpp      | 10 ++++++----
 src/json.hpp.re2c | 10 ++++++----
 2 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/src/json.hpp b/src/json.hpp
index 9c0df9d4..83cbfdb1 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -10590,13 +10590,14 @@ can be used by adding `"_json"` to a string literal and returns a JSON object
 if no parse error occurred.
 
 @param[in] s  a string representation of a JSON object
+@param[in] n  the length of string @a s
 @return a JSON object
 
 @since version 1.0.0
 */
-inline nlohmann::json operator "" _json(const char* s, std::size_t)
+inline nlohmann::json operator "" _json(const char* s, std::size_t n)
 {
-    return nlohmann::json::parse(s);
+    return nlohmann::json::parse(s, s + n);
 }
 
 /*!
@@ -10607,13 +10608,14 @@ can be used by adding `"_json_pointer"` to a string literal and returns a JSON p
 object if no parse error occurred.
 
 @param[in] s  a string representation of a JSON Pointer
+@param[in] n  the length of string @a s
 @return a JSON pointer object
 
 @since version 2.0.0
 */
-inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t)
+inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n)
 {
-    return nlohmann::json::json_pointer(s);
+    return nlohmann::json::json_pointer(std::string(s, n));
 }
 
 // restore GCC/clang diagnostic settings
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index 656e13b3..f36879f8 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -9887,13 +9887,14 @@ can be used by adding `"_json"` to a string literal and returns a JSON object
 if no parse error occurred.
 
 @param[in] s  a string representation of a JSON object
+@param[in] n  the length of string @a s
 @return a JSON object
 
 @since version 1.0.0
 */
-inline nlohmann::json operator "" _json(const char* s, std::size_t)
+inline nlohmann::json operator "" _json(const char* s, std::size_t n)
 {
-    return nlohmann::json::parse(s);
+    return nlohmann::json::parse(s, s + n);
 }
 
 /*!
@@ -9904,13 +9905,14 @@ can be used by adding `"_json_pointer"` to a string literal and returns a JSON p
 object if no parse error occurred.
 
 @param[in] s  a string representation of a JSON Pointer
+@param[in] n  the length of string @a s
 @return a JSON pointer object
 
 @since version 2.0.0
 */
-inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t)
+inline nlohmann::json::json_pointer operator "" _json_pointer(const char* s, std::size_t n)
 {
-    return nlohmann::json::json_pointer(s);
+    return nlohmann::json::json_pointer(std::string(s, n));
 }
 
 // restore GCC/clang diagnostic settings