Project

General

Profile

Actions

Bug #3571

closed

[BUG] if rb_notimplement() is called in an anonymous block called by rb_block_call()

Added by usa (Usaku NAKAMURA) over 14 years ago. Updated over 13 years ago.

Status:
Closed
Target version:
ruby -v:
ruby 1.9.3dev (2010-07-13 trunk 28631) [i386-mswin32]
Backport:
[ruby-dev:41852]

Description

=begin
たぶん表題の通りですが、具体的には、mswinで以下のコードで再現します。

require "openssl"
c = OpenSSL::Config.new("NUL")
c["foo"] = [["bar", "baz"]]

で、先週くらいからなかださんとコソコソ相談してたのですが、原因は
ext/openssl/ossl_config.cの中で、

(1) まずossl_config_set_section()が呼ばれる
(2) rb_block_call()が呼ばれる
(3) set_conf_section_i() → ossl_config_add_value() → rb_notimplement()が呼ばれる。
(4) rb_frame_this_func() → frame_func_id() が呼ばれる。
(5) cfp->me がNULLなのに華麗に参照している。

ということが起きているのが原因だと判明しました。

要するに空のcfp->meの部分をスキップするとかなんらかの工夫が必要なわけですが、
しばらくなかださんと眺めた限りではちょびっとだけ面倒そうなのと、長期的には
1.9.2へのbackportもすべきだろうという気もするので、記録のためにチケットを
残します。
たぶん修正自体は遠からず行われるとは思います。
=end

Actions #1

Updated by nobu (Nobuyoshi Nakada) over 14 years ago

  • Status changed from Assigned to Closed
  • % Done changed from 0 to 100

=begin
This issue was solved with changeset r28642.
Usaku, thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.

=end

Actions

Also available in: Atom PDF

Like0
Like0