diff options
author | sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> | 2020-09-28 14:33:25 +0200 |
---|---|---|
committer | sternenseemann <0rpkxez4ksa01gb3typccl0i@systemli.org> | 2020-09-28 14:33:25 +0200 |
commit | f07be4b0307934cd69500fa5eeb412c20e6cb697 (patch) | |
tree | af7d940e9565ad8aa7f0c33ecc7f557f11fcfef5 | |
parent | b2c590b9cada5b7831888c8279fe72e333a39ec3 (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.c | 6 |
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, '-'); \ |