diff options
author | xi <xi@18f92427-320e-0410-9341-c67f048884a3> | 2009-08-29 19:15:31 +0000 |
---|---|---|
committer | xi <xi@18f92427-320e-0410-9341-c67f048884a3> | 2009-08-29 19:15:31 +0000 |
commit | e0520e571eba024e4f41fb6511fa9dd1b7afdef4 (patch) | |
tree | 030a79c67a139049e59e6b3eadbba34b2bff8eff | |
parent | 6dffe544b954c2b0148cff8b7cd841ae5323835a (diff) | |
download | pyyaml-e0520e571eba024e4f41fb6511fa9dd1b7afdef4.tar.gz |
Fixed a problem when CDumper incorrectly serializes a node anchor.
git-svn-id: http://svn.pyyaml.org/pyyaml/trunk@350 18f92427-320e-0410-9341-c67f048884a3
-rw-r--r-- | ext/_yaml.pyx | 9 | ||||
-rw-r--r-- | tests/data/aliases-cdumper-bug.code | 1 | ||||
-rw-r--r-- | tests/lib/test_constructor.py | 4 | ||||
-rw-r--r-- | tests/lib3/test_constructor.py | 4 |
4 files changed, 15 insertions, 3 deletions
diff --git a/ext/_yaml.pyx b/ext/_yaml.pyx index ab17623..3be0f4f 100644 --- a/ext/_yaml.pyx +++ b/ext/_yaml.pyx @@ -1380,7 +1380,14 @@ cdef class CEmitter: anchor_object = self.anchors[node] anchor = NULL if anchor_object is not None: - anchor = PyString_AS_STRING(PyUnicode_AsUTF8String(anchor_object)) + if PyUnicode_CheckExact(anchor_object): + anchor_object = PyUnicode_AsUTF8String(anchor_object) + if not PyString_CheckExact(anchor_object): + if PY_MAJOR_VERSION < 3: + raise TypeError("anchor must be a string") + else: + raise TypeError(u"anchor must be a string") + anchor = PyString_AS_STRING(anchor_object) if node in self.serialized_nodes: if yaml_alias_event_initialize(&event, anchor) == 0: raise MemoryError diff --git a/tests/data/aliases-cdumper-bug.code b/tests/data/aliases-cdumper-bug.code new file mode 100644 index 0000000..0168441 --- /dev/null +++ b/tests/data/aliases-cdumper-bug.code @@ -0,0 +1 @@ +[ today, today ] diff --git a/tests/lib/test_constructor.py b/tests/lib/test_constructor.py index 0aacf17..beee7b0 100644 --- a/tests/lib/test_constructor.py +++ b/tests/lib/test_constructor.py @@ -17,7 +17,7 @@ def _make_objects(): global MyLoader, MyDumper, MyTestClass1, MyTestClass2, MyTestClass3, YAMLObject1, YAMLObject2, \ AnObject, AnInstance, AState, ACustomState, InitArgs, InitArgsWithState, \ NewArgs, NewArgsWithState, Reduce, ReduceWithState, MyInt, MyList, MyDict, \ - FixedOffset, execute + FixedOffset, today, execute class MyLoader(yaml.Loader): pass @@ -213,6 +213,8 @@ def _make_objects(): def dst(self, dt): return datetime.timedelta(0) + today = datetime.date.today() + def _load_code(expression): return eval(expression) diff --git a/tests/lib3/test_constructor.py b/tests/lib3/test_constructor.py index b4b0884..427f53c 100644 --- a/tests/lib3/test_constructor.py +++ b/tests/lib3/test_constructor.py @@ -14,7 +14,7 @@ def _make_objects(): global MyLoader, MyDumper, MyTestClass1, MyTestClass2, MyTestClass3, YAMLObject1, YAMLObject2, \ AnObject, AnInstance, AState, ACustomState, InitArgs, InitArgsWithState, \ NewArgs, NewArgsWithState, Reduce, ReduceWithState, MyInt, MyList, MyDict, \ - FixedOffset, execute + FixedOffset, today, execute class MyLoader(yaml.Loader): pass @@ -200,6 +200,8 @@ def _make_objects(): def dst(self, dt): return datetime.timedelta(0) + today = datetime.date.today() + def _load_code(expression): return eval(expression) |