summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorxi <xi@18f92427-320e-0410-9341-c67f048884a3>2007-08-21 20:25:34 +0000
committerxi <xi@18f92427-320e-0410-9341-c67f048884a3>2007-08-21 20:25:34 +0000
commit1fa53636429d4be3f24a933c47592ed48dd6bc08 (patch)
tree40219732594b801f2f2314525bb3c780f903049d /ext
parentd9f18f734cff972dcacc26dd1eae96110874aea2 (diff)
downloadpyyaml-1fa53636429d4be3f24a933c47592ed48dd6bc08.tar.gz
Make compose() and load() ensure that the input stream contains a single document. Fixes #54.
git-svn-id: http://svn.pyyaml.org/pyyaml/trunk@258 18f92427-320e-0410-9341-c67f048884a3
Diffstat (limited to 'ext')
-rw-r--r--ext/_yaml.pyx18
1 files changed, 18 insertions, 0 deletions
diff --git a/ext/_yaml.pyx b/ext/_yaml.pyx
index ac8f803..76b307a 100644
--- a/ext/_yaml.pyx
+++ b/ext/_yaml.pyx
@@ -663,6 +663,24 @@ cdef class CParser:
if self.parsed_event.type != YAML_STREAM_END_EVENT:
return self._compose_document()
+ def get_single_node(self):
+ self._parse_next_event()
+ yaml_event_delete(&self.parsed_event)
+ self._parse_next_event()
+ document = None
+ if self.parsed_event.type != YAML_STREAM_END_EVENT:
+ document = self._compose_document()
+ self._parse_next_event()
+ if self.parsed_event.type != YAML_STREAM_END_EVENT:
+ mark = Mark(self.stream_name,
+ self.parsed_event.start_mark.index,
+ self.parsed_event.start_mark.line,
+ self.parsed_event.start_mark.column,
+ None, None)
+ raise ComposerError("expected a single document in the stream",
+ document.start_mark, "but found another document", mark)
+ return document
+
cdef object _compose_document(self):
yaml_event_delete(&self.parsed_event)
node = self._compose_node(None, None)