diff --git a/ChangeLog b/ChangeLog index 3b3e0bf905..b8ada561c4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Sat Nov 12 10:59:49 2011 KOSAKI Motohiro + + * io.c (setup_narg): fix off by one bug. + Sat Nov 12 10:56:43 2011 KOSAKI Motohiro * io.c (+setup_narg): factor out length calculation logic. diff --git a/io.c b/io.c index bb62d3de54..45931adacf 100644 --- a/io.c +++ b/io.c @@ -7959,13 +7959,12 @@ setup_narg(int cmd, VALUE *argp, int io_p) len = 256; rb_str_modify(arg); - if (len <= RSTRING_LEN(arg)) { - len = RSTRING_LEN(arg); - } - if (RSTRING_LEN(arg) < len) { + /* expand for data + sentinel. */ + if (RSTRING_LEN(arg) < len+1) { rb_str_resize(arg, len+1); } - RSTRING_PTR(arg)[len] = 17; /* a little sanity check here */ + /* a little sanity check here */ + RSTRING_PTR(arg)[RSTRING_LEN(arg) - 1] = 17; narg = (long)(SIGNED_VALUE)RSTRING_PTR(arg); } }