mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
process.c: get rid of inadvertent ID pindown
* process.c (check_exec_redirect_fd, check_exec_redirect), (rb_execarg_addopt): get rid of inadvertent ID pindown. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a6755b6e5f
commit
09fbd56e6f
3 changed files with 44 additions and 6 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
Mon Nov 24 12:44:35 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
|
* process.c (check_exec_redirect_fd, check_exec_redirect),
|
||||||
|
(rb_execarg_addopt): get rid of inadvertent ID pindown.
|
||||||
|
|
||||||
Mon Nov 24 02:03:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
Mon Nov 24 02:03:40 2014 Nobuyoshi Nakada <nobu@ruby-lang.org>
|
||||||
|
|
||||||
* string.c (rb_str_setter): preserve encoding of global variable
|
* string.c (rb_str_setter): preserve encoding of global variable
|
||||||
|
|
13
process.c
13
process.c
|
@ -1489,7 +1489,7 @@ check_exec_redirect_fd(VALUE v, int iskey)
|
||||||
fd = FIX2INT(v);
|
fd = FIX2INT(v);
|
||||||
}
|
}
|
||||||
else if (SYMBOL_P(v)) {
|
else if (SYMBOL_P(v)) {
|
||||||
ID id = SYM2ID(v);
|
ID id = rb_check_id(&v);
|
||||||
if (id == id_in)
|
if (id == id_in)
|
||||||
fd = 0;
|
fd = 0;
|
||||||
else if (id == id_out)
|
else if (id == id_out)
|
||||||
|
@ -1553,7 +1553,7 @@ check_exec_redirect(VALUE key, VALUE val, struct rb_execarg *eargp)
|
||||||
|
|
||||||
switch (TYPE(val)) {
|
switch (TYPE(val)) {
|
||||||
case T_SYMBOL:
|
case T_SYMBOL:
|
||||||
id = SYM2ID(val);
|
if (!(id = rb_check_id(&val))) goto wrong_symbol;
|
||||||
if (id == id_close) {
|
if (id == id_close) {
|
||||||
param = Qnil;
|
param = Qnil;
|
||||||
eargp->fd_close = check_exec_redirect1(eargp->fd_close, key, param);
|
eargp->fd_close = check_exec_redirect1(eargp->fd_close, key, param);
|
||||||
|
@ -1571,8 +1571,9 @@ check_exec_redirect(VALUE key, VALUE val, struct rb_execarg *eargp)
|
||||||
eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param);
|
eargp->fd_dup2 = check_exec_redirect1(eargp->fd_dup2, key, param);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
rb_raise(rb_eArgError, "wrong exec redirect symbol: %s",
|
wrong_symbol:
|
||||||
rb_id2name(id));
|
rb_raise(rb_eArgError, "wrong exec redirect symbol: %"PRIsVALUE,
|
||||||
|
val);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1588,7 +1589,7 @@ check_exec_redirect(VALUE key, VALUE val, struct rb_execarg *eargp)
|
||||||
case T_ARRAY:
|
case T_ARRAY:
|
||||||
path = rb_ary_entry(val, 0);
|
path = rb_ary_entry(val, 0);
|
||||||
if (RARRAY_LEN(val) == 2 && SYMBOL_P(path) &&
|
if (RARRAY_LEN(val) == 2 && SYMBOL_P(path) &&
|
||||||
SYM2ID(path) == id_child) {
|
path == ID2SYM(id_child)) {
|
||||||
param = check_exec_redirect_fd(rb_ary_entry(val, 1), 0);
|
param = check_exec_redirect_fd(rb_ary_entry(val, 1), 0);
|
||||||
eargp->fd_dup2_child = check_exec_redirect1(eargp->fd_dup2_child, key, param);
|
eargp->fd_dup2_child = check_exec_redirect1(eargp->fd_dup2_child, key, param);
|
||||||
}
|
}
|
||||||
|
@ -1663,7 +1664,7 @@ rb_execarg_addopt(VALUE execarg_obj, VALUE key, VALUE val)
|
||||||
|
|
||||||
switch (TYPE(key)) {
|
switch (TYPE(key)) {
|
||||||
case T_SYMBOL:
|
case T_SYMBOL:
|
||||||
id = SYM2ID(key);
|
if (!(id = rb_check_id(&key))) return ST_STOP;
|
||||||
#ifdef HAVE_SETPGID
|
#ifdef HAVE_SETPGID
|
||||||
if (id == id_pgroup) {
|
if (id == id_pgroup) {
|
||||||
rb_pid_t pgroup;
|
rb_pid_t pgroup;
|
||||||
|
|
|
@ -320,5 +320,37 @@ module Test_Symbol
|
||||||
end
|
end
|
||||||
end;
|
end;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_execopt_key
|
||||||
|
name = noninterned_name.intern
|
||||||
|
assert_raise(ArgumentError) {
|
||||||
|
system(".", name => nil)
|
||||||
|
}
|
||||||
|
assert_not_pinneddown(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_execopt_redirect_value
|
||||||
|
name = noninterned_name.intern
|
||||||
|
assert_raise(ArgumentError) {
|
||||||
|
system(".", [] => name)
|
||||||
|
}
|
||||||
|
assert_not_pinneddown(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_execopt_redirect_path
|
||||||
|
name = noninterned_name.intern
|
||||||
|
assert_raise(TypeError) {
|
||||||
|
system(".", [] => [name, 0])
|
||||||
|
}
|
||||||
|
assert_not_pinneddown(name)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_execopt_redirect_symbol
|
||||||
|
name = noninterned_name.intern
|
||||||
|
assert_raise(ArgumentError) {
|
||||||
|
system(".", in: name)
|
||||||
|
}
|
||||||
|
assert_not_pinneddown(name)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue