Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 14928b3

Browse files
authored
Merge pull request #17300 from meeseeksmachine/auto-backport-of-pr-17263-on-v3.2.x
Backport PR #17263 on branch v3.2.x (you can't call CGDataProviderCreateWithData on a stack pointer)
2 parents 6e3b540 + 6d07be7 commit 14928b3

File tree

1 file changed

+12
-12
lines changed

1 file changed

+12
-12
lines changed

src/_macosx.m

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1606,24 +1606,25 @@ - (void)setCanvas: (PyObject*)newCanvas
16061606

16071607
static void _buffer_release(void* info, const void* data, size_t size) {
16081608
PyBuffer_Release((Py_buffer *)info);
1609+
free(info);
16091610
}
16101611

16111612
static 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

Comments
 (0)