GitHub

Original file line numberDiff line numberDiff line change

@@ -1688,7 +1688,10 @@ io_unget_data(mrb_state *mrb, struct mrb_io *fptr, const char *ptr, mrb_int len)

16881688

if (len > SHRT_MAX) {

16891689

mrb_raise(mrb, E_ARGUMENT_ERROR, "string too long to ungetc");

16901690

}

1691-

if (len > MRB_IO_BUF_SIZE - buf->len) {

1691+

if (buf->len + len > SHRT_MAX) {

1692+

mrb_raise(mrb, E_ARGUMENT_ERROR, "total ungetc buffer exceeds maximum size");

1693+

}

1694+

if (buf->len + len > MRB_IO_BUF_SIZE) {

16921695

fptr->buf = (struct mrb_io_buf*)mrb_realloc(mrb, buf, sizeof(struct mrb_io_buf)+buf->len+len-MRB_IO_BUF_SIZE);

16931696

buf = fptr->buf;

16941697

}

Read the original on github.com ↗