From d60851168e5b9450825b1effbfdc02856c568dbc Mon Sep 17 00:00:00 2001
From: Niels Lohmann <mail@nlohmann.me>
Date: Wed, 22 Mar 2017 08:10:02 +0100
Subject: [PATCH] :rotating_light: fixed a compiler warning #527

The result of snprintf is later used in situations where a long may
overflow.
---
 src/json.hpp      | 11 +++++------
 src/json.hpp.re2c | 11 +++++------
 2 files changed, 10 insertions(+), 12 deletions(-)

diff --git a/src/json.hpp b/src/json.hpp
index 20bd25f5..1ccbfa61 100644
--- a/src/json.hpp
+++ b/src/json.hpp
@@ -6929,8 +6929,8 @@ class basic_json
             static constexpr auto d = std::numeric_limits<number_float_t>::digits10;
 
             // the actual conversion
-            long len = snprintf(number_buffer.data(), number_buffer.size(),
-                                "%.*g", d, x);
+            std::ptrdiff_t len = snprintf(number_buffer.data(), number_buffer.size(),
+                                          "%.*g", d, x);
 
             // negative value indicates an error
             assert(len > 0);
@@ -10429,10 +10429,9 @@ class basic_json
 
         Proof (by contradiction): Assume a finite input. To loop forever, the
         loop must never hit code with a `break` statement. The only code
-        snippets without a `break` statement are the continue statements for
-        whitespace and byte-order-marks. To loop forever, the input must be an
-        infinite sequence of whitespace or byte-order-marks. This contradicts
-        the assumption of finite input, q.e.d.
+        snippets without a `break` statement is the continue statement for
+        whitespace. To loop forever, the input must be an infinite sequence
+        whitespace. This contradicts the assumption of finite input, q.e.d.
         */
         token_type scan()
         {
diff --git a/src/json.hpp.re2c b/src/json.hpp.re2c
index da5dd86d..6a1e09e3 100644
--- a/src/json.hpp.re2c
+++ b/src/json.hpp.re2c
@@ -6929,8 +6929,8 @@ class basic_json
             static constexpr auto d = std::numeric_limits<number_float_t>::digits10;
 
             // the actual conversion
-            long len = snprintf(number_buffer.data(), number_buffer.size(),
-                                "%.*g", d, x);
+            std::ptrdiff_t len = snprintf(number_buffer.data(), number_buffer.size(),
+                                          "%.*g", d, x);
 
             // negative value indicates an error
             assert(len > 0);
@@ -10429,10 +10429,9 @@ class basic_json
 
         Proof (by contradiction): Assume a finite input. To loop forever, the
         loop must never hit code with a `break` statement. The only code
-        snippets without a `break` statement are the continue statements for
-        whitespace and byte-order-marks. To loop forever, the input must be an
-        infinite sequence of whitespace or byte-order-marks. This contradicts
-        the assumption of finite input, q.e.d.
+        snippets without a `break` statement is the continue statement for
+        whitespace. To loop forever, the input must be an infinite sequence
+        whitespace. This contradicts the assumption of finite input, q.e.d.
         */
         token_type scan()
         {