mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* 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. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@10850 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
1165542a92
commit
d9d3a1b2fb
3 changed files with 21 additions and 9 deletions
11
ChangeLog
11
ChangeLog
|
|
@ -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.
|
||||
|
|
|
|||
7
io.c
7
io.c
|
|
@ -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))
|
||||
|
|
|
|||
12
process.c
12
process.c
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue