encoding.c (enc_table_expand): prefer xrealloc to realloc

And raise an exception when failed to register an encoding
This commit is contained in:
Yusuke Endoh 2019-07-15 12:00:12 +09:00
Родитель c23e597674
Коммит 76bad330aa
1 изменённых файлов: 4 добавлений и 2 удалений

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

@ -268,8 +268,7 @@ enc_table_expand(int newsize)
if (enc_table.size >= newsize) return newsize;
newsize = (newsize + 7) / 8 * 8;
ent = realloc(enc_table.list, sizeof(*enc_table.list) * newsize);
if (!ent) return -1;
ent = xrealloc(enc_table.list, sizeof(*enc_table.list) * newsize);
memset(ent + enc_table.size, 0, sizeof(*ent)*(newsize - enc_table.size));
enc_table.list = ent;
enc_table.size = newsize;
@ -443,6 +442,9 @@ enc_replicate_with_index(const char *name, rb_encoding *origenc, int idx)
set_base_encoding(idx, origenc);
set_encoding_const(name, rb_enc_from_index(idx));
}
else {
rb_raise(rb_eArgError, "failed to replicate encoding");
}
return idx;
}