summaryrefslogtreecommitdiff
path: root/process.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-25 03:08:40 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-02-25 03:08:40 +0000
commite110c0ddc5e9d07821f8e7d5d0a7de96fe826eab (patch)
tree9bfeff9b5a2d780ed44b8df98bed92827465814d /process.c
parent71da3c50ef010d75391050e2919af7c9e0a6b262 (diff)
guard before noreturn function
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'process.c')
-rw-r--r--process.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/process.c b/process.c
index 54687096e0..853bc10c5e 100644
--- a/process.c
+++ b/process.c
@@ -4097,8 +4097,9 @@ rb_f_system(int argc, VALUE *argv)
if (pid < 0) {
if (eargp->exception) {
int err = errno;
- rb_syserr_fail_str(err, eargp->invoke.sh.shell_script);
+ VALUE command = eargp->invoke.sh.shell_script;
RB_GC_GUARD(execarg_obj);
+ rb_syserr_fail_str(err, command);
}
else {
return Qnil;
@@ -4107,11 +4108,12 @@ rb_f_system(int argc, VALUE *argv)
status = PST2INT(rb_last_status_get());
if (status == EXIT_SUCCESS) return Qtrue;
if (eargp->exception) {
+ VALUE command = eargp->invoke.sh.shell_script;
VALUE str = rb_str_new_cstr("Command failed with");
rb_str_cat_cstr(pst_message_status(str, status), ": ");
- rb_str_append(str, eargp->invoke.sh.shell_script);
- rb_exc_raise(rb_exc_new_str(rb_eRuntimeError, str));
+ rb_str_append(str, command);
RB_GC_GUARD(execarg_obj);
+ rb_exc_raise(rb_exc_new_str(rb_eRuntimeError, str));
}
else {
return Qfalse;