diff options
-rw-r--r-- | ChangeLog | 11 | ||||
-rw-r--r-- | io.c | 7 | ||||
-rw-r--r-- | process.c | 12 |
3 files changed, 21 insertions, 9 deletions
@@ -1,3 +1,14 @@ +Mon Sep 4 16:13:23 2006 Yukihiro Matsumoto <matz@ruby-lang.org> + + * io.c (pipe_open): command name should not contain null bytes. + [ruby-dev:29421] + + * process.c (proc_spawn): ditto. + + * process.c (proc_spawn_n): ditto. + + * process.c (rb_f_system): ditto. + Sun Sep 3 15:32:44 2006 Nobuyoshi Nakada <nobu@ruby-lang.org> * lib/mkmf.rb: get rid of nil.to_s. @@ -3030,7 +3030,7 @@ pipe_open(pstr, pname, mode) #if defined(DJGPP) || defined(__human68k__) || defined(__VMS) FILE *f; - if (!pname) pname = StringValuePtr(pstr); + if (!pname) pname = StringValueCStr(pstr); f = popen(pname, mode); if (!f) rb_sys_fail(pname); @@ -3055,8 +3055,7 @@ pipe_open(pstr, pname, mode) int pid; FILE *fpr, *fpw; - if (!pname) pname = StringValuePtr(pstr); - + if (!pname) pname = StringValueCStr(pstr); retry: pid = pipe_exec(pname, rb_io_mode_modenum(mode), &fpr, &fpw); if (pid == -1) { /* exec failed */ @@ -3089,7 +3088,7 @@ retry: int pid, pr[2], pw[2]; volatile int doexec; - if (!pname) pname = StringValuePtr(pstr); + if (!pname) pname = StringValueCStr(pstr); if (((modef & FMODE_READABLE) && pipe(pr) == -1) || ((modef & FMODE_WRITABLE) && pipe(pw) == -1)) @@ -1136,13 +1136,13 @@ proc_spawn_n(argc, argv, prog) args = ALLOCA_N(char*, argc + 1); for (i = 0; i < argc; i++) { SafeStringValue(argv[i]); - args[i] = RSTRING(argv[i])->ptr; + args[i] = StringValueCStr(argv[i]); } if (prog) SafeStringValue(prog); args[i] = (char*) 0; if (args[0]) - return proc_spawn_v(args, prog ? RSTRING(prog)->ptr : 0); + return proc_spawn_v(args, prog ? StringValueCStr(prog) : 0); return -1; } @@ -1157,7 +1157,7 @@ proc_spawn(sv) int status; SafeStringValue(sv); - str = s = RSTRING(sv)->ptr; + str = s = StringValueCStr(sv); for (s = str; *s; s++) { if (*s != ' ' && !ISALPHA(*s) && strchr("*?{}[]<>()~&|\\$;'`\"\n",*s)) { char *shell = dln_find_exe("sh", 0); @@ -1458,7 +1458,7 @@ rb_f_system(argc, argv) if (argc == 1 && prog == 0) { #if defined(_WIN32) SafeStringValue(argv[0]); - status = do_spawn(P_WAIT, RSTRING(argv[0])->ptr); + status = do_spawn(P_WAIT, StringValueCStr(argv[0])); #else status = proc_spawn(argv[0]); #endif @@ -1486,7 +1486,7 @@ rb_f_system(argc, argv) cmd = rb_ary_join(rb_ary_new4(argc, argv), rb_str_new2(" ")); SafeStringValue(cmd); - status = system(RSTRING(cmd)->ptr); + status = system(StringValueCStr(cmd)); last_status_set((status & 0xff) << 8, 0); #else volatile VALUE prog = 0; @@ -1511,9 +1511,11 @@ rb_f_system(argc, argv) if (prog) { SafeStringValue(prog); + StringValueCStr(prog); } for (i = 0; i < argc; i++) { SafeStringValue(argv[i]); + StringValueCStr(argv[i]); } security(RSTRING(prog ? prog : argv[0])->ptr); chfunc = signal(SIGCHLD, SIG_DFL); |