Mercurial > cpython-lru_cache-weakref
diff Python/getargs.c @ 62483:13b2a592c186 3.1
Issue #8926: getargs.c: release the buffer on error
- "t#" format: don't get the buffer if the object is not a pinned buffer
- getbuffer(): release the buffer on error
(Commit based on r82206 from py3k)
| author | Victor Stinner <victor.stinner@haypocalc.com> |
|---|---|
| date | Thu, 24 Jun 2010 23:06:25 +0000 |
| parents | b2c1995633bd |
| children | d9633064458c 3c9232a684ae |
line wrap: on
line diff
--- a/Python/getargs.c Thu Jun 24 22:49:57 2010 +0000 +++ b/Python/getargs.c Thu Jun 24 23:06:25 2010 +0000 @@ -1384,6 +1384,10 @@ return converterr( "bytes or read-only character buffer", arg, msgbuf, bufsize); + if (pb->bf_releasebuffer) + return converterr( + "string or pinned buffer", + arg, msgbuf, bufsize); if (PyObject_GetBuffer(arg, &view, PyBUF_SIMPLE) != 0) return converterr("string or single-segment read-only buffer", @@ -1391,10 +1395,6 @@ count = view.len; *p = view.buf; - if (pb->bf_releasebuffer) - return converterr( - "string or pinned buffer", - arg, msgbuf, bufsize); PyBuffer_Release(&view); @@ -1460,6 +1460,7 @@ return -1; } if (!PyBuffer_IsContiguous(view, 'C')) { + PyBuffer_Release(view); *errmsg = "contiguous buffer"; return -1; }
