[#35027] [Ruby 1.9-Bug#4352][Open] [patch] Fix eval(s, b) backtrace; make eval(s, b) consistent with eval(s) — "James M. Lawrence" <redmine@...>
Bug #4352: [patch] Fix eval(s, b) backtrace; make eval(s, b) consistent w=
Issue #4352 has been updated by James M. Lawrence.
Hi,
On Wed, Feb 2, 2011 at 10:47 AM, Yusuke ENDOH <[email protected]> wrote:
Hi,
[#35036] [Ruby 1.9-Bug#4354][Open] File.realdirpath is expected to test for real file. — Luis Lavena <redmine@...>
Bug #4354: File.realdirpath is expected to test for real file.
[#35055] [Ruby 1.9-Bug#4359][Open] regular expressions created with Regexp::FIXEDENCODING have incorrect inspect — Aaron Patterson <redmine@...>
Bug #4359: regular expressions created with Regexp::FIXEDENCODING have incorrect inspect
[#35071] Bug in system()? — Anthony Wright <anthony@...>
I've just hit a problem where the system() method to call an external program failed in a fairly unpredictable way, and I couldn't get any clues from within ruby to diagnose the problem. As a result I ended up debugging process.c to work out what the problem was.
[#35100] [Ruby 1.9-Bug#4370][Open] Abort trap in net/http — David Phillips <redmine@...>
Bug #4370: Abort trap in net/http
[#35114] [Ruby 1.9-Bug#4373][Open] http.rb:677: [BUG] Segmentation fault — Christian Fazzini <redmine@...>
Bug #4373: http.rb:677: [BUG] Segmentation fault
[#35144] Documentation Clarifications to Array methods rotate, rotate!, index, and rindex — Loren Sands-Ramshaw <lorensr@...>
Tue Feb 8 11:47:11 2011 Loren Sands-Ramshaw <[email protected]>
[#35146] [Ruby 1.9-Bug#4383][Assigned] psych fails to parse a symbol in a flow sequence — Yuki Sonoda <redmine@...>
Bug #4383: psych fails to parse a symbol in a flow sequence
[#35167] Redmine misconfigured (was Re: Re: [Ruby 1.9-Bug#4340] Encoding of result string for String#gsub is not consistent) — mathew <meta@...>
On Tue, Feb 8, 2011 at 16:27, Eric Hodel <[email protected]> wrote:
[#35171] [Ruby 1.9-Bug#4386][Open] encoding: directive does not affect regex expressions — mathew murphy <redmine@...>
Bug #4386: encoding: directive does not affect regex expressions
[#35202] Patch to Net::InternetMessageIO — Daniel Cormier <daniel.cormier@...>
=A0=A0This patch addresses an issue when sending a message with Net::SMTP
On Fri, Feb 11, 2011 at 09:13, Daniel Cormier <[email protected]> wr=
Perhaps that is a better solution, but shouldn't sending a message
On Fri, Feb 11, 2011 at 17:08, Daniel Cormier <[email protected]> wrote:
Ok, but since the period escaping is already being done (just with
[#35237] [Ruby 1.9-Bug#4400][Open] nested at_exit hooks run in strange order — Suraj Kurapati <redmine@...>
Bug #4400: nested at_exit hooks run in strange order
Issue #4400 has been updated by Motohiro KOSAKI.
[#35332] [ANN] Planned maintenance of redmine.ruby-lang.org — "Yuki Sonoda (Yugui)" <yugui@...>
-----BEGIN PGP SIGNED MESSAGE-----
-----BEGIN PGP SIGNED MESSAGE-----
[#35340] odd require behavior — Roger Pack <rogerdpack2@...>
Hello all.
[#35355] eval'ing large strings runs out of stack space? — Roger Pack <rogerdpack2@...>
Hello all.
Hello Roger,
[#35356] suggestion: default irb to saving history — Roger Pack <rogerdpack2@...>
Hello all.
[#35367] [Ruby 1.9 - Bug #4440] [Open] odd evaluation order in a multiple assignment — Yusuke Endoh <mame@...>
[#35376] [Ruby 1.9 - Feature #4447] [Open] add String#byteslice() method — Suraj Kurapati <sunaku@...>
string.force_encoding(ENCODING::BINARY).slice almost does what you want,
[ruby-core:35139] [Ruby 1.9-Bug#4379][Open] [patch] eval(s, b, "(eval)", n) discards location
Bug #4379: [patch] eval(s, b, "(eval)", n) discards location
http://redmine.ruby-lang.org/issues/show/4379
Author: James M. Lawrence
Status: Open, Priority: Normal
Category: core, Target version: 1.9.x
ruby -v: ruby 1.9.3dev (2011-02-08 trunk 30820) [i386-darwin9.8.0]
% ruby -e 'p eval("raise", nil, "(eval)", 999)'
-e:1:in `eval': (eval):999:in `<main>': (RuntimeError)
from -e:1:in `eval'
from -e:1:in `<main>'
With binding, location is ignored.
% ruby -e 'p eval("raise", binding, "(eval)", 999)'
-e:1:in `<main>': unhandled exception
from -e:1:in `eval'
from -e:1:in `<main>'
source_location has a similar problem.
The patch also applies cleanly to 1.9.2.
----------------------------------------
http://redmine.ruby-lang.org
Attachments (2)
diff --git a/test/ruby/test_eval.rb b/test/ruby/test_eval.rb
index 299165f..50a58ad 100644
--- a/test/ruby/test_eval.rb
+++ b/test/ruby/test_eval.rb
@@ -430,4 +430,23 @@ class TestEval < Test::Unit::TestCase
result = foo.instance_eval(&foo_pr)
assert_equal(1, result, 'Bug #3786, Bug #3860, [ruby-core:32501]')
end
+
+ def test_eval_backtrace
+ begin
+ eval("raise", binding, "(eval)", 9999)
+ rescue => e
+ assert_match /:9999:/, e.backtrace[0]
+ end
+ end
+
+ def test_eval_source_location
+ expected = ["(eval)", 9999]
+
+ source =
+ "class << Object.new ;" <<
+ "def f ; end ;" <<
+ "instance_method(:f).source_location ; end"
+
+ assert_equal expected, eval(source, binding, *expected)
+ end
end
diff --git a/vm_eval.c b/vm_eval.c
index 0dcbafa..85d6e28 100644
--- a/vm_eval.c
+++ b/vm_eval.c
@@ -960,10 +960,13 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *cref, const char
rb_block_t block;
volatile int parse_in_eval;
volatile int mild_compile_error;
+ volatile int is_user_file = FALSE;
if (file == 0) {
file = rb_sourcefile();
line = rb_sourceline();
+ } else {
+ is_user_file = TRUE;
}
parse_in_eval = th->parse_in_eval;
@@ -977,7 +980,7 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *cref, const char
if (rb_obj_is_kind_of(scope, rb_cBinding)) {
GetBindingPtr(scope, bind);
envval = bind->env;
- if (strcmp(file, "(eval)") == 0 && bind->filename != Qnil) {
+ if (!is_user_file && strcmp(file, "(eval)") == 0 && bind->filename != Qnil) {
file = RSTRING_PTR(bind->filename);
line = bind->line_no;
}
@@ -1035,7 +1038,7 @@ eval_string_with_cref(VALUE self, VALUE src, VALUE scope, NODE *cref, const char
if (state) {
if (state == TAG_RAISE) {
VALUE errinfo = th->errinfo;
- if (strcmp(file, "(eval)") == 0) {
+ if (!is_user_file && strcmp(file, "(eval)") == 0) {
VALUE mesg, errat, bt2;
extern VALUE rb_get_backtrace(VALUE info);
ID id_mesg;