diff options
-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) |