Skip to content

Commit f110e99

Browse files
committed
Raise error consistently from inside ImagingNewArrow
1 parent 7b114b9 commit f110e99

2 files changed

Lines changed: 16 additions & 12 deletions

File tree

src/_imaging.c

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -323,13 +323,9 @@ _new_arrow(PyObject *self, PyObject *args) {
323323
mode_id = findModeID(mode);
324324

325325
// ImagingBorrowArrow is responsible for retaining the array_capsule
326-
ret = PyImagingNew(
326+
return PyImagingNew(
327327
ImagingNewArrow(mode_id, xsize, ysize, schema_capsule, array_capsule)
328328
);
329-
if (!ret) {
330-
return ImagingError_ValueError("Invalid Arrow array mode or size mismatch");
331-
}
332-
return ret;
333329
}
334330

335331
/* -------------------------------------------------------------------- */

src/libImaging/Storage.c

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -708,9 +708,11 @@ ImagingNewArrow(
708708
&& im->bands == 1)) // Single band match
709709
&& pixels == external_array->length) {
710710
// one arrow element per, and it matches a pixelsize*char
711-
if (ImagingBorrowArrow(im, external_array, im->pixelsize, array_capsule)) {
712-
return im;
711+
if (!ImagingBorrowArrow(im, external_array, im->pixelsize, array_capsule)) {
712+
ImagingDelete(im);
713+
return NULL;
713714
}
715+
return im;
714716
}
715717
// Stored as [[r,g,b,a],...]
716718
if (strcmp(schema->format, "+w:4") == 0 // 4 up array
@@ -724,9 +726,11 @@ ImagingNewArrow(
724726
&& external_array->children // array is well formed
725727
&& 4 * pixels == external_array->children[0]->length) {
726728
// 4 up element of char into pixelsize == 4
727-
if (ImagingBorrowArrow(im, external_array, 1, array_capsule)) {
728-
return im;
729+
if (!ImagingBorrowArrow(im, external_array, 1, array_capsule)) {
730+
ImagingDelete(im);
731+
return NULL;
729732
}
733+
return im;
730734
}
731735
// Stored as [r,g,b,a,r,g,b,a,...]
732736
if (strcmp(schema->format, "C") == 0 // uint8
@@ -735,13 +739,17 @@ ImagingNewArrow(
735739
&& strcmp(im->arrow_band_format, "C") == 0 // expected format
736740
&& 4 * pixels == external_array->length) { // expected length
737741
// single flat array, interleaved storage.
738-
if (ImagingBorrowArrow(im, external_array, 1, array_capsule)) {
739-
return im;
742+
if (!ImagingBorrowArrow(im, external_array, 1, array_capsule)) {
743+
ImagingDelete(im);
744+
return NULL;
740745
}
746+
return im;
741747
}
742748
// fmt: on
743749
ImagingDelete(im);
744-
return NULL;
750+
return (Imaging)ImagingError_ValueError(
751+
"Invalid Arrow array mode or size mismatch"
752+
);
745753
}
746754

747755
Imaging

0 commit comments

Comments
 (0)