@@ -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
747755Imaging
0 commit comments