summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-sprintf/src/sprintf.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <[email protected]>2017-04-29 10:17:24 +0900
committerNobuyoshi Nakada <[email protected]>2017-04-29 10:17:24 +0900
commitef6e14ee2b1037ed3e8c08bc215d82cd22816ba3 (patch)
tree9dfa4113ab69496c0f2fb5ee4e700cc0b2557c1a /mrbgems/mruby-sprintf/src/sprintf.c
parente05c30738ead860f7d59fe1de7cd14cad2b36cc0 (diff)
downloadmruby-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.c5
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);