[ruby-list:40801] YAML.dump で無限ループになる

From: Kouhei Yanagita <sugi@...>
Date: 2005-05-05 16:00:27 UTC
List: ruby-list #40801
こんにちは。柳田です。

ruby 1.8.2 (2005-04-27) [i386-cygwin] において、
YAML.dump が無限ループになる場合に遭遇しました。

手元で再現するコードを添付します。

データを少し変化させると再現したりしなくなったりで、
正確な再現条件はよく分かりません。

C-c で中断させると、以下のようなメッセージが出ます。

/usr/local/lib/ruby/1.8/yaml/rubytypes.rb:328:in `to_yaml': Interrupt
        from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:307:in `call'
        from /usr/local/lib/ruby/1.8/yaml.rb:373:in `quick_emit'
        from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:307:in `to_yaml'
        from /usr/local/lib/ruby/1.8/yaml/baseemitter.rb:175:in `map'
        from /usr/local/lib/ruby/1.8/yaml/baseemitter.rb:170:in `each'
        from /usr/local/lib/ruby/1.8/yaml/baseemitter.rb:170:in `map'
        from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:25:in `to_yaml'
        from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:24:in `call'
         ... 700 levels...
        from /usr/local/lib/ruby/1.8/yaml.rb:373:in `quick_emit'
        from /usr/local/lib/ruby/1.8/yaml/rubytypes.rb:222:in `to_yaml'
        from /usr/local/lib/ruby/1.8/yaml.rb:103:in `dump'
        from test.rb:28

-- 
Kouhei Yanagita / sugi@dream.big.or.jp

--Multipart_Fri_May_06_00:59:56_2005-1
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="test.rb"
Content-Transfer-Encoding: 7bit

#!/usr/local/bin/ruby -Ks

module Uploader
  class Item
    def initialize(fn, filesize, number, last_modified, comment)
      @filename = fn
      @filesize = filesize
      @number = number
      @last_modified = last_modified
      @comment = comment
    end
    attr_reader :filename, :last_modified, :comment, :number, :parent, :filesize
    attr_writer :filename, :last_modified, :comment, :parent
  end

  class ItemGroup
    def initialize(number, title)
      @items = []
      @number = number
      @title = title
    end
    attr_reader :items, :number, :title
  end
end


s = DATA.read(nil)
require 'yaml'
a = YAML.load(s)
YAML.dump(a)



__END__
--- 
- &id001 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_001-001.png
      filesize: 0
      last_modified: 2005-05-05 23:48:36.925874 +09:00
      number: 1
      parent: *id001
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_001-002.png
      filesize: 0
      last_modified: 2005-05-05 23:49:06.215396 +09:00
      number: 2
      parent: *id001
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_001-003.png
      filesize: 0
      last_modified: 2005-05-05 23:49:14.766506 +09:00
      number: 3
      parent: *id001
  number: 1
  title: ''
- &id002 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_002-001.png
      filesize: 0
      last_modified: 2005-05-05 23:49:33.673146 +09:00
      number: 1
      parent: *id002
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_002-002.png
      filesize: 0
      last_modified: 2005-05-05 23:50:34.406009 +09:00
      number: 2
      parent: *id002
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_002-003.png
      filesize: 0
      last_modified: 2005-05-05 23:50:47.014970 +09:00
      number: 3
      parent: *id002
  number: 2
  title: ''
- &id003 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_003-001.png
      filesize: 0
      last_modified: 2005-05-05 23:51:02.901020 +09:00
      number: 1
      parent: *id003
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_003-002.png
      filesize: 0
      last_modified: 2005-05-05 23:51:16.231563 +09:00
      number: 2
      parent: *id003
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_003-003.png
      filesize: 0
      last_modified: 2005-05-05 23:51:26.205355 +09:00
      number: 3
      parent: *id003
  number: 3
  title: ''
- &id004 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_004-001.png
      filesize: 0
      last_modified: 2005-05-05 23:51:46.070679 +09:00
      number: 1
      parent: *id004
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_004-002.png
      filesize: 0
      last_modified: 2005-05-05 23:51:56.024703 +09:00
      number: 2
      parent: *id004
  number: 4
  title: "ほげ5"
- &id005 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_005-001.png
      filesize: 0
      last_modified: 2005-05-05 23:52:14.245472 +09:00
      number: 1
      parent: *id005
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_005-002.png
      filesize: 0
      last_modified: 2005-05-05 23:52:32.349775 +09:00
      number: 2
      parent: *id005
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_005-003.png
      filesize: 0
      last_modified: 2005-05-05 23:52:48.999153 +09:00
      number: 3
      parent: *id005
  number: 5
  title: "ほげ8"
- &id006 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_006-001.png
      filesize: 0
      last_modified: 2005-05-05 23:53:09.944092 +09:00
      number: 1
      parent: *id006
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_006-002.png
      filesize: 0
      last_modified: 2005-05-05 23:53:21.048095 +09:00
      number: 2
      parent: *id006
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_006-003.png
      filesize: 0
      last_modified: 2005-05-05 23:53:31.622946 +09:00
      number: 3
      parent: *id006
  number: 6
  title: "ほげ9"
- &id007 !ruby/object:Uploader::ItemGroup 
  items: 
    - !ruby/object:Uploader::Item 
      comment: ''
      filename: hogehoge_007-001.png
      filesize: 0
      last_modified: 2005-05-05 23:53:09.944092 +09:00
      number: 1
      parent: *id007
  number: 7
  title: "ほげ10"

--Multipart_Fri_May_06_00:59:56_2005-1--

In This Thread

Prev Next