From d9ec8fc905fc9ed37c86700f794adeb883b4f5ea Mon Sep 17 00:00:00 2001 From: INADA Naoki Date: Thu, 11 Jan 2018 23:50:41 +0900 Subject: Packer.pack() reset buffer on exception (#274) fixes #210 --- msgpack/_packer.pyx | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'msgpack/_packer.pyx') diff --git a/msgpack/_packer.pyx b/msgpack/_packer.pyx index a4913ab..35e5a9d 100644 --- a/msgpack/_packer.pyx +++ b/msgpack/_packer.pyx @@ -289,11 +289,13 @@ cdef class Packer(object): cpdef pack(self, object obj): cdef int ret - ret = self._pack(obj, DEFAULT_RECURSE_LIMIT) - if ret == -1: - raise MemoryError - elif ret: # should not happen. - raise TypeError + try: + ret = self._pack(obj, DEFAULT_RECURSE_LIMIT) + except: + self.pk.length = 0 + raise + if ret: # should not happen. + raise RuntimeError("internal error") if self.autoreset: buf = PyBytes_FromStringAndSize(self.pk.buf, self.pk.length) self.pk.length = 0 -- cgit v1.2.1