[#27003] [Bug #2422] splat operator fails on array of 1 element — Raul Parolari <redmine@...>

Bug #2422: splat operator fails on array of 1 element

12 messages 2009/12/02

[#27025] [Backport #2431] StringIO#{gets,readlines} with "" (paragraph mode) trims last "\n" — Hiroshi NAKAMURA <redmine@...>

Backport #2431: StringIO#{gets,readlines} with "" (paragraph mode) trims last "\n"

8 messages 2009/12/04

[#27086] [Feature #2454] OpenSSL has no maintainer — Yui NARUSE <redmine@...>

Feature #2454: OpenSSL has no maintainer

16 messages 2009/12/07

[#27120] #to_enum ignores block? — Roger Pack <rogerdpack@...>

Is #to_enum ignoring its block expected?

11 messages 2009/12/09

[#27135] better GC? — Roger Pack <rogerdpack@...>

Could I put in a small plea for a better GC?

56 messages 2009/12/10
[#27136] Re: better GC? — Yukihiro Matsumoto <matz@...> 2009/12/11

Hi,

[#27476] Re: better GC? — Paul Brannan <pbrannan@...> 2010/01/07

On Fri, Dec 11, 2009 at 09:07:16AM +0900, Yukihiro Matsumoto wrote:

[#27477] Re: better GC? — Eero Saynatkari <ruby-ml@...> 2010/01/07

Excerpts from Paul Brannan's message of Thu Jan 07 21:53:34 +0200 2010:

[#27563] Re: better GC? — Brent Roman <brent@...> 2010/01/12

[#27199] [Backport #2488] thread usage can result in bad HANDLE — Roger Pack <redmine@...>

Backport #2488: thread usage can result in bad HANDLE

12 messages 2009/12/16

[#27286] [Bug #2515] Array#select! — Roger Pack <redmine@...>

Bug #2515: Array#select!

17 messages 2009/12/22

[#27327] [Bug #2531] Ruby 1.8.7-p248 fails to cross-compile same version — Luis Lavena <redmine@...>

Bug #2531: Ruby 1.8.7-p248 fails to cross-compile same version

9 messages 2009/12/25

[#27360] [Feature #2542] URI lib should be updated to RFC 39886 — Marc-Andre Lafortune <redmine@...>

Feature #2542: URI lib should be updated to RFC 39886

15 messages 2009/12/31

[ruby-core:27219] [Bug #2494] Bug in th->method_missing_reason produces strange behavior with coercion

From: Yehuda Katz <redmine@...>
Date: 2009-12-19 00:26:22 UTC
List: ruby-core #27219
Bug #2494: Bug in th->method_missing_reason produces strange behavior with coercion
http://redmine.ruby-lang.org/issues/show/2494

Author: Yehuda Katz
Status: Open, Priority: High
Category: core
ruby -v: ruby 1.9.2dev (2009-12-18 trunk 26119) [x86_64-darwin10.2.0] 

Currently, Ruby uses check_funcall as part of its coercion behavior. That function calls check_funcall_exec, which calls method_missing without first setting th->method_missing_reason. As a result, the internal method_missing raises a NameError or NoMethodError based upon the LAST call to method_missing. If the last call was a vcall, the internal method_missing raises a NameError, which is *not* rescued by check_funcall.

You can see this bug in the following code:

    class Blah
 
      def setup_vcall
        # Force th->method_missing_reason to be set to a vcall
        not_there rescue nil
      end
 
      def method_missing(meth, *args)
        puts "trying #{meth}"
        super
      end
    end
    
 
    b = Blah.new
    b.setup_vcall
 
    p [b].flatten

The patch is at http://gist.github.com/raw/259216/0a5749ab27a4bf7510cccb5cd52b793a82dcef1a/gistfile2.diff. This patch sets th->method_missing_reason, which will cause the internal call to method_missing to *always* raise a NoMethodError, which will be correctly rescued by check_funcall.

This bug caused problems in ActiveSupport (http://github.com/rails/rails/blob/master/activesupport/lib/active_support/whiny_nil.rb#L47-48), which we resolved by explicitly looking for :to_ary and raising NoMethodError. This should not have been needed, because calling super in method_missing would have raised NoMethodError if th->method_missing_reason was set correctly.


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next