* io.c (rb_open_file): should check NUL in path.

<http://www.rubyist.net/~matz/20080125.html#c01>.

* io.c (rb_io_s_popen): ditto.

* io.c (rb_io_reopen): ditto.

* io.c (next_argv): ditto.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15286 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
matz 2008-01-28 03:32:27 +00:00
parent 4a94863244
commit 06cd63ce93
2 changed files with 26 additions and 15 deletions

View File

@ -15,6 +15,17 @@ Mon Jan 28 00:39:09 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* parse.y (parser_set_encode): check if encoding is ASCII compatible. * parse.y (parser_set_encode): check if encoding is ASCII compatible.
Mon Jan 28 01:21:15 2008 Yukihiro Matsumoto <matz@ruby-lang.org>
* io.c (rb_open_file): should check NUL in path.
<http://www.rubyist.net/~matz/20080125.html#c01>.
* io.c (rb_io_s_popen): ditto.
* io.c (rb_io_reopen): ditto.
* io.c (next_argv): ditto.
Sun Jan 27 23:33:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org> Sun Jan 27 23:33:35 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* sprintf.c (rb_str_format): fix for left justify flag. * sprintf.c (rb_str_format): fix for left justify flag.

30
io.c
View File

@ -3653,7 +3653,7 @@ pipe_open(const char *cmd, int argc, VALUE *argv, const char *mode)
argbuf = rb_str_tmp_new((argc+1) * sizeof(char *)); argbuf = rb_str_tmp_new((argc+1) * sizeof(char *));
args = (void *)RSTRING_PTR(argbuf); args = (void *)RSTRING_PTR(argbuf);
for (i = 0; i < argc; ++i) { for (i = 0; i < argc; ++i) {
args[i] = RSTRING_PTR(argv[i]); args[i] = StringValueCStr(argv[i]);
} }
args[i] = NULL; args[i] = NULL;
exename = cmd; exename = cmd;
@ -3717,7 +3717,7 @@ pipe_open_v(int argc, VALUE *argv, const char *mode)
const char *cmd; const char *cmd;
if (!RB_GC_GUARD(prog)) prog = argv[0]; if (!RB_GC_GUARD(prog)) prog = argv[0];
cmd = RSTRING_PTR(prog); cmd = StringValueCStr(prog);
return pipe_open(cmd, argc, argv, mode); return pipe_open(cmd, argc, argv, mode);
} }
@ -3802,7 +3802,7 @@ rb_io_s_popen(int argc, VALUE *argv, VALUE klass)
mode = rb_io_modenum_mode(FIX2INT(pmode)); mode = rb_io_modenum_mode(FIX2INT(pmode));
} }
else { else {
mode = StringValuePtr(pmode); mode = StringValueCStr(pmode);
} }
tmp = rb_check_array_type(pname); tmp = rb_check_array_type(pname);
if (!NIL_P(tmp)) { if (!NIL_P(tmp)) {
@ -3848,7 +3848,7 @@ rb_open_file(int argc, VALUE *argv, VALUE io)
} }
else { else {
SafeStringValue(vmode); SafeStringValue(vmode);
flags = rb_io_mode_modenum(RSTRING_PTR(vmode)); flags = rb_io_mode_modenum(StringValueCStr(vmode));
} }
fmode = NIL_P(perm) ? 0666 : NUM2INT(perm); fmode = NIL_P(perm) ? 0666 : NUM2INT(perm);
@ -3856,7 +3856,7 @@ rb_open_file(int argc, VALUE *argv, VALUE io)
} }
else { else {
mode = NIL_P(vmode) ? "r" : StringValuePtr(vmode); mode = NIL_P(vmode) ? "r" : StringValueCStr(vmode);
rb_file_open_internal(io, RSTRING_PTR(fname), mode); rb_file_open_internal(io, RSTRING_PTR(fname), mode);
} }
return io; return io;
@ -3912,7 +3912,7 @@ rb_io_s_sysopen(int argc, VALUE *argv)
else if (FIXNUM_P(vmode)) flags = FIX2INT(vmode); else if (FIXNUM_P(vmode)) flags = FIX2INT(vmode);
else { else {
SafeStringValue(vmode); SafeStringValue(vmode);
flags = rb_io_mode_modenum(RSTRING_PTR(vmode)); flags = rb_io_mode_modenum(StringValueCStr(vmode));
} }
if (NIL_P(perm)) fmode = 0666; if (NIL_P(perm)) fmode = 0666;
else fmode = NUM2INT(perm); else fmode = NUM2INT(perm);
@ -4207,7 +4207,7 @@ rb_io_reopen(int argc, VALUE *argv, VALUE file)
} }
if (!NIL_P(nmode)) { if (!NIL_P(nmode)) {
int flags = rb_io_mode_flags(StringValuePtr(nmode)); int flags = rb_io_mode_flags(StringValueCStr(nmode));
if (IS_PREP_STDIO(fptr) && if (IS_PREP_STDIO(fptr) &&
((fptr->mode & FMODE_READWRITE) & (flags & FMODE_READWRITE)) != ((fptr->mode & FMODE_READWRITE) & (flags & FMODE_READWRITE)) !=
(fptr->mode & FMODE_READWRITE)) { (fptr->mode & FMODE_READWRITE)) {
@ -4225,7 +4225,7 @@ rb_io_reopen(int argc, VALUE *argv, VALUE file)
fptr->path = 0; fptr->path = 0;
} }
fptr->path = strdup(RSTRING_PTR(fname)); fptr->path = strdup(StringValueCStr(fname));
mode = rb_io_flags_mode(fptr->mode); mode = rb_io_flags_mode(fptr->mode);
if (fptr->fd < 0) { if (fptr->fd < 0) {
fptr->fd = rb_sysopen(fptr->path, rb_io_mode_modenum(mode), 0666); fptr->fd = rb_sysopen(fptr->path, rb_io_mode_modenum(mode), 0666);
@ -4238,13 +4238,13 @@ rb_io_reopen(int argc, VALUE *argv, VALUE file)
} }
if (fptr->stdio_file) { if (fptr->stdio_file) {
if (freopen(RSTRING_PTR(fname), mode, fptr->stdio_file) == 0) { if (freopen(fptr->path, mode, fptr->stdio_file) == 0) {
rb_sys_fail(fptr->path); rb_sys_fail(fptr->path);
} }
fptr->fd = fileno(fptr->stdio_file); fptr->fd = fileno(fptr->stdio_file);
#ifdef USE_SETVBUF #ifdef USE_SETVBUF
if (setvbuf(fptr->stdio_file, NULL, _IOFBF, 0) != 0) if (setvbuf(fptr->stdio_file, NULL, _IOFBF, 0) != 0)
rb_warn("setvbuf() can't be honoured for %s", RSTRING_PTR(fname)); rb_warn("setvbuf() can't be honoured for %s", fptr->path);
#endif #endif
} }
else { else {
@ -4741,7 +4741,7 @@ rb_io_initialize(int argc, VALUE *argv, VALUE io)
} }
else { else {
SafeStringValue(mode); SafeStringValue(mode);
flags = rb_io_mode_modenum(RSTRING_PTR(mode)); flags = rb_io_mode_modenum(StringValueCStr(mode));
} }
} }
orig = rb_io_check_io(fnum); orig = rb_io_check_io(fnum);
@ -4765,7 +4765,7 @@ rb_io_initialize(int argc, VALUE *argv, VALUE io)
GetOpenFile(orig, ofp); GetOpenFile(orig, ofp);
if (ofp->refcnt == LONG_MAX) { if (ofp->refcnt == LONG_MAX) {
VALUE s = rb_inspect(orig); VALUE s = rb_inspect(orig);
rb_raise(rb_eIOError, "too many shared IO for %s", StringValuePtr(s)); rb_raise(rb_eIOError, "too many shared IO for %s", StringValueCStr(s));
} }
if (argc == 2) { if (argc == 2) {
fmode = rb_io_modenum_flags(flags); fmode = rb_io_modenum_flags(flags);
@ -4927,7 +4927,7 @@ next_argv(void)
retry: retry:
if (RARRAY_LEN(rb_argv) > 0) { if (RARRAY_LEN(rb_argv) > 0) {
filename = rb_ary_shift(rb_argv); filename = rb_ary_shift(rb_argv);
fn = StringValuePtr(filename); fn = StringValueCStr(filename);
if (strlen(fn) == 1 && fn[0] == '-') { if (strlen(fn) == 1 && fn[0] == '-') {
current_file = rb_stdin; current_file = rb_stdin;
if (ruby_inplace_mode) { if (ruby_inplace_mode) {
@ -5601,7 +5601,7 @@ rb_f_syscall(int argc, VALUE *argv)
if (!NIL_P(v)) { if (!NIL_P(v)) {
StringValue(v); StringValue(v);
rb_str_modify(v); rb_str_modify(v);
arg[i] = (unsigned long)RSTRING_PTR(v); arg[i] = (unsigned long)StringValueCStr(v);
} }
else { else {
arg[i] = (unsigned long)NUM2LONG(*argv); arg[i] = (unsigned long)NUM2LONG(*argv);
@ -6440,7 +6440,7 @@ opt_i_set(VALUE val)
StringValue(val); StringValue(val);
if (ruby_inplace_mode) free(ruby_inplace_mode); if (ruby_inplace_mode) free(ruby_inplace_mode);
ruby_inplace_mode = 0; ruby_inplace_mode = 0;
ruby_inplace_mode = strdup(RSTRING_PTR(val)); ruby_inplace_mode = strdup(StringValueCStr(val));
} }
/* /*