diff options
| author | Nobuyoshi Nakada <[email protected]> | 2017-04-29 10:17:24 +0900 |
|---|---|---|
| committer | Nobuyoshi Nakada <[email protected]> | 2017-04-29 10:17:24 +0900 |
| commit | ef6e14ee2b1037ed3e8c08bc215d82cd22816ba3 (patch) | |
| tree | 9dfa4113ab69496c0f2fb5ee4e700cc0b2557c1a /mrbgems/mruby-sprintf/src/sprintf.c | |
| parent | e05c30738ead860f7d59fe1de7cd14cad2b36cc0 (diff) | |
| download | mruby-ef6e14ee2b1037ed3e8c08bc215d82cd22816ba3.tar.gz mruby-ef6e14ee2b1037ed3e8c08bc215d82cd22816ba3.zip | |
Better error message
Raise argument error with the better message, at the only place
where the size to fill can be negative.
Diffstat (limited to 'mrbgems/mruby-sprintf/src/sprintf.c')
| -rw-r--r-- | mrbgems/mruby-sprintf/src/sprintf.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/mrbgems/mruby-sprintf/src/sprintf.c b/mrbgems/mruby-sprintf/src/sprintf.c index d99d74efc..080e2549d 100644 --- a/mrbgems/mruby-sprintf/src/sprintf.c +++ b/mrbgems/mruby-sprintf/src/sprintf.c @@ -116,7 +116,6 @@ mrb_fix2binstr(mrb_state *mrb, mrb_value x, int base) #define CHECK(l) do {\ /* int cr = ENC_CODERANGE(result);*/\ - if ((l) < 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "illegal specifier"); \ while ((l) >= bsiz - blen) {\ bsiz*=2;\ if (bsiz < 0) mrb_raise(mrb, E_ARGUMENT_ERROR, "too big specifier"); \ @@ -1059,6 +1058,10 @@ retry: if ((flags&FWIDTH) && need < width) need = width; need += 20; + if (need <= 0) { + mrb_raise(mrb, E_ARGUMENT_ERROR, + (width > prec ? "width too big" : "prec too big")); + } CHECK(need); n = snprintf(&buf[blen], need, fbuf, fval); |
