@@ -498,7 +498,7 @@ getink(PyObject *color, Imaging im, char *ink) {
498498 be cast to either UINT8 or INT32 */
499499
500500 int rIsInt = 0 ;
501- if (PyTuple_Check (color ) && PyTuple_Size (color ) == 1 ) {
501+ if (PyTuple_Check (color ) && PyTuple_GET_SIZE (color ) == 1 ) {
502502 color = PyTuple_GetItem (color , 0 );
503503 }
504504 if (im -> type == IMAGING_TYPE_UINT8 || im -> type == IMAGING_TYPE_INT32 ||
@@ -527,7 +527,10 @@ getink(PyObject *color, Imaging im, char *ink) {
527527 if (im -> bands == 1 ) {
528528 /* unsigned integer, single layer */
529529 if (rIsInt != 1 ) {
530- if (!PyArg_ParseTuple (color , "L" , & r )) {
530+ if (PyTuple_GET_SIZE (color ) != 1 ) {
531+ PyErr_SetString (PyExc_TypeError , "color must be int or single-element tuple" );
532+ return NULL ;
533+ } else if (!PyArg_ParseTuple (color , "L" , & r )) {
531534 return NULL ;
532535 }
533536 }
@@ -542,13 +545,20 @@ getink(PyObject *color, Imaging im, char *ink) {
542545 g = (UINT8 )(r >> 8 );
543546 r = (UINT8 )r ;
544547 } else {
548+ int tupleSize = PyTuple_GET_SIZE (color );
545549 if (im -> bands == 2 ) {
546- if (!PyArg_ParseTuple (color , "L|i" , & r , & a )) {
550+ if (tupleSize != 1 && tupleSize != 2 ) {
551+ PyErr_SetString (PyExc_TypeError , "color must be int, or tuple of one or two elements" );
552+ return NULL ;
553+ } else if (!PyArg_ParseTuple (color , "L|i" , & r , & a )) {
547554 return NULL ;
548555 }
549556 g = b = r ;
550557 } else {
551- if (!PyArg_ParseTuple (color , "Lii|i" , & r , & g , & b , & a )) {
558+ if (tupleSize != 3 && tupleSize != 4 ) {
559+ PyErr_SetString (PyExc_TypeError , "color must be int, or tuple of one, three or four elements" );
560+ return NULL ;
561+ } else if (!PyArg_ParseTuple (color , "Lii|i" , & r , & g , & b , & a )) {
552562 return NULL ;
553563 }
554564 }
0 commit comments