mirror of
https://github.com/ruby/ruby.git
synced 2025-08-23 13:04:13 +02:00
* string.c (rb_str_sum): check was done with false pointer.
[ruby-dev:24383] * string.c (rb_str_sum): string may be altered. [ruby-dev:24381] * eval.c (rb_f_eval): defer pointer retrieval to prevent unsafe sourcefile string modification. [ruby-dev:24373] * io.c (io_read): block string buffer modification during rb_io_fread() by freezing it temporarily. [ruby-dev:24366] * io.c (rb_io_s_popen): mode argument may be altered. [ruby-dev:24375] * file.c (rb_file_s_basename): ext argument may be altered. [ruby-dev:24377] * enum.c (enum_sort_by): use NODE instead of 2 element arrays. [ruby-dev:24378] * string.c (rb_str_chomp_bang): StringValue() may change the receiver. [ruby-dev:24371] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_8@6979 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d57bbd48f8
commit
6f9dcadf6e
16 changed files with 328 additions and 160 deletions
15
eval.c
15
eval.c
|
@ -6187,12 +6187,13 @@ rb_f_eval(argc, argv, self)
|
|||
SafeStringValue(src);
|
||||
}
|
||||
if (argc >= 3) {
|
||||
file = StringValuePtr(vfile);
|
||||
StringValue(vfile);
|
||||
}
|
||||
if (argc >= 4) {
|
||||
line = NUM2INT(vline);
|
||||
}
|
||||
|
||||
if (!NIL_P(vfile)) file = RSTRING(vfile)->ptr;
|
||||
if (NIL_P(scope) && ruby_frame->prev) {
|
||||
struct FRAME *prev;
|
||||
VALUE val;
|
||||
|
@ -8096,6 +8097,14 @@ proc_invoke(proc, args, self, klass)
|
|||
POP_ITER();
|
||||
ruby_block = old_block;
|
||||
ruby_wrapper = old_wrapper;
|
||||
if (FL_TEST(ruby_dyna_vars, DVAR_DONT_RECYCLE)) {
|
||||
struct RVarmap *vars;
|
||||
|
||||
for (vars = old_dvars; vars; vars = vars->next) {
|
||||
if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
|
||||
FL_SET(vars, DVAR_DONT_RECYCLE);
|
||||
}
|
||||
}
|
||||
ruby_dyna_vars = old_dvars;
|
||||
ruby_safe_level = safe;
|
||||
|
||||
|
@ -12076,6 +12085,7 @@ rb_callcc(self)
|
|||
volatile rb_thread_t th_save;
|
||||
struct tag *tag;
|
||||
struct RVarmap *vars;
|
||||
struct BLOCK *blk;
|
||||
|
||||
THREAD_ALLOC(th);
|
||||
cont = Data_Wrap_Struct(rb_cCont, thread_mark, thread_free, th);
|
||||
|
@ -12086,11 +12096,10 @@ rb_callcc(self)
|
|||
}
|
||||
th->thread = curr_thread->thread;
|
||||
|
||||
for (vars = th->dyna_vars; vars; vars = vars->next) {
|
||||
for (vars = ruby_dyna_vars; vars; vars = vars->next) {
|
||||
if (FL_TEST(vars, DVAR_DONT_RECYCLE)) break;
|
||||
FL_SET(vars, DVAR_DONT_RECYCLE);
|
||||
}
|
||||
|
||||
th_save = th;
|
||||
if (THREAD_SAVE_CONTEXT(th)) {
|
||||
return th_save->result;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue