summary refs log tree commit diff
diff options
context:
space:
mode:
authorsternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2020-09-28 14:33:25 +0200
committersternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org>2020-09-28 14:33:25 +0200
commitf07be4b0307934cd69500fa5eeb412c20e6cb697 (patch)
treeaf7d940e9565ad8aa7f0c33ecc7f557f11fcfef5
parentb2c590b9cada5b7831888c8279fe72e333a39ec3 (diff)
fix(emitjson): resolve minimum value of signed type leading to garbage
E. g. for INT8_MIN = -128  -u results (theoretically) in +128 which is
greater than INT8_MAX (= 127). To avoid such issues we only invert the
individual digits.
-rw-r--r--warteraum/emitjson.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/warteraum/emitjson.c b/warteraum/emitjson.c
index f5ef6eb..70b61b9 100644
--- a/warteraum/emitjson.c
+++ b/warteraum/emitjson.c
@@ -145,16 +145,18 @@ void ej_bool(struct ej_context *ctx, bool b) {
                                                                \
     if(sign && u < 0) {                                        \
       add_sign = true;                                         \
-      u = -u;                                                  \
     }                                                          \
                                                                \
     do {                                                       \
       start--;                                                 \
       len++;                                                   \
       d = u % 10;                                              \
+      if(add_sign) {                                           \
+        d = -d;                                                \
+      }                                                        \
       u = u / 10;                                              \
       *start = d + 48;                                         \
-    } while(u > 0 && len <= BUF_SIZE);                         \
+    } while(u != 0 && len <= BUF_SIZE);                        \
                                                                \
     if(add_sign) {                                             \
       ej_putc(ctx, '-');                                       \