Avoid integer overflow in sprintf()

merged ff03a9a61c

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58034 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
nobu 2017-03-20 01:36:08 +00:00
Родитель f31bb33a3b
Коммит 57d6dd5a46
1 изменённых файлов: 2 добавлений и 1 удалений

Просмотреть файл

@ -55,8 +55,9 @@ sign_bits(int base, const char *p)
#define CHECK(l) do {\ #define CHECK(l) do {\
int cr = ENC_CODERANGE(result);\ int cr = ENC_CODERANGE(result);\
while (blen + (l) >= bsiz) {\ while ((l) >= bsiz - blen) {\
bsiz*=2;\ bsiz*=2;\
if (bsiz<0) rb_raise(rb_eArgError, "too big specifier");\
}\ }\
rb_str_resize(result, bsiz);\ rb_str_resize(result, bsiz);\
ENC_CODERANGE_SET(result, cr);\ ENC_CODERANGE_SET(result, cr);\