Bugs item #3654, was opened at 2006-02-24 15:45
You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=3654&group_id=426

Category: Standard Library
Group: None
Status: Open
Resolution: None
Priority: 3
Submitted By: Hannes Wyss (hwyss)
Assigned to: Nobody (None)
Summary: Syck fails with parse error on parsing multiple documents

Initial Comment:
195-documents.yaml is a File (12M) containing 195 complex YAML-Documents (I can provide the file if necessary)

Without custom domain-types
ruby -r'yaml' -e 'docs = []; File.open("195-documents.yaml") { |fh| YAML.each_document(fh) { |doc| docs.push(doc) } }; puts docs.size'
-> 18

With custom domain-types
ruby -r'yaml' -r'domain-types' -e 'docs = []; File.open("195-documents.yaml") { |fh| YAML.each_document(fh) { |doc| docs.push(doc) } }; puts docs.size'
-> /usr/lib/ruby/1.8/yaml.rb:217:in `load_documents': syntax error on line 23806, col 36: `on (<0,1%). Rarement peuvent se' (ArgumentError)
        from /usr/lib/ruby/1.8/yaml.rb:217:in `each_document'
        from -e:1
        from -e:1


With a backport from ruby 1.9 the Problem goes away. Here is a minimal patch:

diff -Nbr -U4 ruby-1.8.4/ext/syck/syck.c yarv-0.4.0/ext/syck/syck.c
--- ruby-1.8.4/ext/syck/syck.c  2005-09-13 05:58:32.000000000 +0200
+++ yarv-0.4.0/ext/syck/syck.c  2006-02-20 07:16:38.000000000 +0100
@@ -1,9 +1,9 @@
 /*
  * syck.c
  *
- * $Author: why $
- * $Date: 2005/09/13 03:58:32 $
+ * $Author: ocean $
+ * $Date: 2006/02/03 06:10:21 $
  *
  * Copyright (C) 2003 why the lucky stiff
  */
 #include "ruby.h"
@@ -409,11 +409,8 @@
     if ( p->token == NULL )
         return 0;

     skip = p->limit - p->token;
-    if ( skip < 1 )
-        return 0;
-
     if ( ( count = p->token - p->buffer ) )
     {
         S_MEMMOVE( p->buffer, p->token, char, skip );
         p->token = p->buffer;



Without custom domain-types
ruby -r'yaml' -e 'docs = []; File.open("195-documents.yaml") { |fh| YAML.each_document(fh) { |doc| docs.push(doc) } }; puts docs.size'
-> 195

With custom domain-types
ruby -r'yaml' -r'domain-types' -e 'docs = []; File.open("195-documents.yaml") { |fh| YAML.each_document(fh) { |doc| docs.push(doc) } }; puts docs.size'
-> 195


Request: 

----------------------------------------------------------------------

You can respond by visiting: 
http://rubyforge.org/tracker/?func=detail&atid=1698&aid=3654&group_id=426