diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-07-05 18:13:37 +0900 |
|---|---|---|
| committer | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-07-05 18:13:37 +0900 |
| commit | b68e7a605ce09e72fe0e0734da1200c2d97ffe93 (patch) | |
| tree | 36f7426f7c0217060ee811ce076f7abdf39439ec /mrbgems/mruby-sprintf/src | |
| parent | b643a1a8bc89b7898d05dc2e26d87f708a5edc32 (diff) | |
| download | mruby-b68e7a605ce09e72fe0e0734da1200c2d97ffe93.tar.gz mruby-b68e7a605ce09e72fe0e0734da1200c2d97ffe93.zip | |
Negation was not a good way to handle negative integers; fix #3729
There's a number that negation does not work (-2147483648 in 32bit
environment).
Diffstat (limited to 'mrbgems/mruby-sprintf/src')
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index d62a28e8c..e02627b86 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -860,11 +860,11 @@ retry: else { sc = '-'; width--; - v = -v; } mrb_assert(base == 10); snprintf(nbuf, sizeof(nbuf), "%" MRB_PRId, v); s = nbuf; + if (v < 0) s++; /* skip minus sign */ } else { s = nbuf; @@ -974,13 +974,12 @@ retry: if (prec > len) { CHECK(prec - len); - if (v < 0) { - char c = sign_bits(base, p); - FILL(c, prec - len); - } - else if ((flags & (FMINUS|FPREC)) != FMINUS) { + if ((flags & (FMINUS|FPREC)) != FMINUS) { char c = '0'; FILL(c, prec - len); + } else if (v < 0) { + char c = sign_bits(base, p); + FILL(c, prec - len); } } PUSH(s, len); |
