[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--