1
0
Fork 0
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:
matz 2006-09-04 07:26:47 +00:00
parent 1165542a92
commit d9d3a1b2fb
3 changed files with 21 additions and 9 deletions

View file

@ -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
View file

@ -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))

View file

@ -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);