$OpenBSD: patch-src_lib_json_json_reader_cpp,v 1.1 2016/01/20 09:37:13 dcoppa Exp $

commit 1b32e3e869059e437c43ba0f8765c3e5857801f7
Author: Michael Shields <mshields@google.com>
Date:   Mon Jul 27 16:35:19 2015 -0700

Fix cases where the most negative signed integer was negated, causing
undefined behavior.

--- src/lib_json/json_reader.cpp.orig	Thu Jul 23 07:32:47 2015
+++ src/lib_json/json_reader.cpp	Wed Jan 20 09:47:02 2016
@@ -517,7 +517,7 @@ bool Reader::decodeNumber(Token& token, Value& decoded
     ++current;
   // TODO: Help the compiler do the div and mod at compile time or get rid of them.
   Value::LargestUInt maxIntegerValue =
-      isNegative ? Value::LargestUInt(-Value::minLargestInt)
+      isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1
                  : Value::maxLargestUInt;
   Value::LargestUInt threshold = maxIntegerValue / 10;
   Value::LargestUInt value = 0;
@@ -538,7 +538,9 @@ bool Reader::decodeNumber(Token& token, Value& decoded
     }
     value = value * 10 + digit;
   }
-  if (isNegative)
+  if (isNegative && value == maxIntegerValue)
+    decoded = Value::minLargestInt;
+  else if (isNegative)
     decoded = -Value::LargestInt(value);
   else if (value <= Value::LargestUInt(Value::maxInt))
     decoded = Value::LargestInt(value);
