@@ -1606,24 +1606,25 @@ - (void)setCanvas: (PyObject*)newCanvas
16061606
16071607static void _buffer_release (void * info, const void * data, size_t size) {
16081608 PyBuffer_Release ((Py_buffer *)info);
1609+ free (info);
16091610}
16101611
16111612static int _copy_agg_buffer (CGContextRef cr, PyObject *renderer)
16121613{
1613- Py_buffer buffer;
1614+ Py_buffer * buffer = malloc ( sizeof (Py_buffer)) ;
16141615
1615- if (PyObject_GetBuffer (renderer, & buffer, PyBUF_CONTIG_RO) == -1 ) {
1616+ if (PyObject_GetBuffer (renderer, buffer, PyBUF_CONTIG_RO) == -1 ) {
16161617 PyErr_Print ();
16171618 return 1 ;
16181619 }
16191620
1620- if (buffer. ndim != 3 || buffer. shape [2 ] != 4 ) {
1621- PyBuffer_Release (& buffer);
1621+ if (buffer-> ndim != 3 || buffer-> shape [2 ] != 4 ) {
1622+ _buffer_release ( buffer, NULL , 0 );
16221623 return 1 ;
16231624 }
16241625
1625- const Py_ssize_t nrows = buffer. shape [0 ];
1626- const Py_ssize_t ncols = buffer. shape [1 ];
1626+ const Py_ssize_t nrows = buffer-> shape [0 ];
1627+ const Py_ssize_t ncols = buffer-> shape [1 ];
16271628 const size_t bytesPerComponent = 1 ;
16281629 const size_t bitsPerComponent = 8 * bytesPerComponent;
16291630 const size_t nComponents = 4 ; /* red, green, blue, alpha */
@@ -1632,16 +1633,16 @@ static int _copy_agg_buffer(CGContextRef cr, PyObject *renderer)
16321633
16331634 CGColorSpaceRef colorspace = CGColorSpaceCreateWithName (kCGColorSpaceGenericRGB );
16341635 if (!colorspace) {
1635- PyBuffer_Release (& buffer);
1636+ _buffer_release ( buffer, NULL , 0 );
16361637 return 1 ;
16371638 }
16381639
1639- CGDataProviderRef provider = CGDataProviderCreateWithData (& buffer,
1640- buffer. buf ,
1641- buffer. len ,
1640+ CGDataProviderRef provider = CGDataProviderCreateWithData (buffer,
1641+ buffer-> buf ,
1642+ buffer-> len ,
16421643 _buffer_release);
16431644 if (!provider) {
1644- PyBuffer_Release (& buffer);
1645+ _buffer_release ( buffer, NULL , 0 );
16451646 CGColorSpaceRelease (colorspace);
16461647 return 1 ;
16471648 }
@@ -1662,7 +1663,6 @@ static int _copy_agg_buffer(CGContextRef cr, PyObject *renderer)
16621663 CGDataProviderRelease (provider);
16631664
16641665 if (!bitmap) {
1665- PyBuffer_Release (&buffer);
16661666 return 1 ;
16671667 }
16681668
0 commit comments