From cda6976ba78891a04e0e440a8b6ff24f63eea523 Mon Sep 17 00:00:00 2001 From: Martin Jambon Date: Fri, 4 Sep 2015 11:06:49 -0700 Subject: [PATCH] Fix https://github.com/mjambon/yojson/issues/20 : invalid serialization of (`Int min_int) because abs min_int < 0 --- test.json | 3 ++- write.ml | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/test.json b/test.json index 6f0f2dbd..3a37d992 100644 --- a/test.json +++ b/test.json @@ -13,5 +13,6 @@ ], "'NULL' U+0000": "\u0000", "'VULGAR FRACTION ONE HALF' U+00BD": "\u00BD", - "'PILE OF POO' U+1F4A9": "\uD83D\uDCA9" + "'PILE OF POO' U+1F4A9": "\uD83D\uDCA9", + "min_int": "-4611686018427387904" } diff --git a/write.ml b/write.ml index d5968ed9..6e3f51f8 100644 --- a/write.ml +++ b/write.ml @@ -85,7 +85,7 @@ let rec write_digits s pos x = else let d = x mod 10 in let pos = write_digits s pos (x / 10) in - s.[pos] <- dec d; + s.[pos] <- dec (abs d); pos + 1 let write_int ob x = @@ -96,7 +96,7 @@ let write_int ob x = let s = ob.o_s in let pos = ob.o_len in s.[pos] <- '-'; - ob.o_len <- write_digits s (pos + 1) (abs x) + ob.o_len <- write_digits s (pos + 1) x ) else Bi_outbuf.add_char ob '0'