From 679e9d36f78de3ac18abaaddbcf4f73fcef55b7e Mon Sep 17 00:00:00 2001 From: Antoine Pitrou Date: Fri, 2 Mar 2012 18:12:43 +0100 Subject: Issue #14172: Fix reference leak when marshalling a buffer-like object (other than a bytes object). --- Python/marshal.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'Python/marshal.c') diff --git a/Python/marshal.c b/Python/marshal.c index 094f732382..7b1af44f99 100644 --- a/Python/marshal.c +++ b/Python/marshal.c @@ -411,11 +411,12 @@ w_object(PyObject *v, WFILE *p) else if (PyObject_CheckBuffer(v)) { /* Write unknown buffer-style objects as a string */ char *s; - PyBufferProcs *pb = v->ob_type->tp_as_buffer; Py_buffer view; - if ((*pb->bf_getbuffer)(v, &view, PyBUF_SIMPLE) != 0) { + if (PyObject_GetBuffer(v, &view, PyBUF_SIMPLE) != 0) { w_byte(TYPE_UNKNOWN, p); + p->depth--; p->error = WFERR_UNMARSHALLABLE; + return; } w_byte(TYPE_STRING, p); n = view.len; @@ -427,8 +428,7 @@ w_object(PyObject *v, WFILE *p) } w_long((long)n, p); w_string(s, (int)n, p); - if (pb->bf_releasebuffer != NULL) - (*pb->bf_releasebuffer)(v, &view); + PyBuffer_Release(&view); } else { w_byte(TYPE_UNKNOWN, p); -- cgit v1.2.1