$NetBSD: patch-ab,v 1.1 2009/08/16 18:21:04 bouyer Exp $

From http://rt.cpan.org/Public/Bug/Display.html?id=43174

--- SAX/PurePerl.pm.orig	2009-08-16 17:34:04.000000000 +0200
+++ SAX/PurePerl.pm	2009-08-16 17:36:40.000000000 +0200
@@ -308,21 +308,27 @@
     
     $self->start_cdata({});
     
-    $data = $reader->data;
+    my $chars;
     while (1) {
-        $self->parser_error("EOF looking for CDATA section end", $reader)
-            unless length($data);
+        # do not miss "]]>", so try to read at least 3 chars
+        $data = $reader->data(3);
+        $self->parser_error
+                ("EOF looking for CDATA section end", $reader)
+                unless length($data) >= 3;
         
         if ($data =~ /^(.*?)\]\]>/s) {
-            my $chars = $1;
+            $chars = $1;
             $reader->move_along(length($chars) + 3);
             $self->characters({Data => $chars});
             last;
         }
         else {
-            $self->characters({Data => $data});
-            $reader->move_along(length($data));
-            $data = $reader->data;
+            # the last one or two "]" could be the beginning of a "]]>",
+            # so do no eat them
+            $data =~ /^(.*?)\]{0,2}+$/s;
+            $chars = $1;
+            $reader->move_along(length($chars));
+            $self->characters({Data => $chars});
         }
     }
     $self->end_cdata({});
