@@ -124,6 +124,7 @@ PyObject_LengthHint(PyObject *o, Py_ssize_t defaultvalue)
124124 return -1 ;
125125 }
126126 else if (result == Py_NotImplemented ) {
127+ Py_DECREF (result );
127128 return defaultvalue ;
128129 }
129130 if (!PyLong_Check (result )) {
@@ -885,20 +886,23 @@ binary_op1(PyObject *v, PyObject *w, const int op_slot
885886 x = slotw (v , w );
886887 if (x != Py_NotImplemented )
887888 return x ;
889+ Py_DECREF (x ); /* can't do it */
888890 slotw = NULL ;
889891 }
890892 x = slotv (v , w );
891893 assert (_Py_CheckSlotResult (v , op_name , x != NULL ));
892894 if (x != Py_NotImplemented ) {
893895 return x ;
894896 }
897+ Py_DECREF (x ); /* can't do it */
895898 }
896899 if (slotw ) {
897900 PyObject * x = slotw (v , w );
898901 assert (_Py_CheckSlotResult (w , op_name , x != NULL ));
899902 if (x != Py_NotImplemented ) {
900903 return x ;
901904 }
905+ Py_DECREF (x ); /* can't do it */
902906 }
903907 Py_RETURN_NOTIMPLEMENTED ;
904908}
@@ -926,6 +930,8 @@ binary_op(PyObject *v, PyObject *w, const int op_slot, const char *op_name)
926930{
927931 PyObject * result = BINARY_OP1 (v , w , op_slot , op_name );
928932 if (result == Py_NotImplemented ) {
933+ Py_DECREF (result );
934+
929935 if (op_slot == NB_SLOT (nb_rshift ) &&
930936 PyCFunction_CheckExact (v ) &&
931937 strcmp (((PyCFunctionObject * )v )-> m_ml -> ml_name , "print" ) == 0 )
@@ -989,20 +995,23 @@ ternary_op(PyObject *v,
989995 if (x != Py_NotImplemented ) {
990996 return x ;
991997 }
998+ Py_DECREF (x ); /* can't do it */
992999 slotw = NULL ;
9931000 }
9941001 x = slotv (v , w , z );
9951002 assert (_Py_CheckSlotResult (v , op_name , x != NULL ));
9961003 if (x != Py_NotImplemented ) {
9971004 return x ;
9981005 }
1006+ Py_DECREF (x ); /* can't do it */
9991007 }
10001008 if (slotw ) {
10011009 PyObject * x = slotw (v , w , z );
10021010 assert (_Py_CheckSlotResult (w , op_name , x != NULL ));
10031011 if (x != Py_NotImplemented ) {
10041012 return x ;
10051013 }
1014+ Py_DECREF (x ); /* can't do it */
10061015 }
10071016
10081017 PyNumberMethods * mz = Py_TYPE (z )-> tp_as_number ;
@@ -1017,6 +1026,7 @@ ternary_op(PyObject *v,
10171026 if (x != Py_NotImplemented ) {
10181027 return x ;
10191028 }
1029+ Py_DECREF (x ); /* can't do it */
10201030 }
10211031 }
10221032
@@ -1063,6 +1073,7 @@ PyNumber_Add(PyObject *v, PyObject *w)
10631073 if (result != Py_NotImplemented ) {
10641074 return result ;
10651075 }
1076+ Py_DECREF (result );
10661077
10671078 PySequenceMethods * m = Py_TYPE (v )-> tp_as_sequence ;
10681079 if (m && m -> sq_concat ) {
@@ -1100,6 +1111,7 @@ PyNumber_Multiply(PyObject *v, PyObject *w)
11001111 if (result == Py_NotImplemented ) {
11011112 PySequenceMethods * mv = Py_TYPE (v )-> tp_as_sequence ;
11021113 PySequenceMethods * mw = Py_TYPE (w )-> tp_as_sequence ;
1114+ Py_DECREF (result );
11031115 if (mv && mv -> sq_repeat ) {
11041116 return sequence_repeat (mv -> sq_repeat , v , w );
11051117 }
@@ -1179,6 +1191,7 @@ binary_iop1(PyObject *v, PyObject *w, const int iop_slot, const int op_slot
11791191 if (x != Py_NotImplemented ) {
11801192 return x ;
11811193 }
1194+ Py_DECREF (x );
11821195 }
11831196 }
11841197#ifdef NDEBUG
@@ -1200,6 +1213,7 @@ binary_iop(PyObject *v, PyObject *w, const int iop_slot, const int op_slot,
12001213{
12011214 PyObject * result = BINARY_IOP1 (v , w , iop_slot , op_slot , op_name );
12021215 if (result == Py_NotImplemented ) {
1216+ Py_DECREF (result );
12031217 return binop_type_error (v , w , op_name );
12041218 }
12051219 return result ;
@@ -1217,6 +1231,7 @@ ternary_iop(PyObject *v, PyObject *w, PyObject *z, const int iop_slot, const int
12171231 if (x != Py_NotImplemented ) {
12181232 return x ;
12191233 }
1234+ Py_DECREF (x );
12201235 }
12211236 }
12221237 return ternary_op (v , w , z , op_slot , op_name );
@@ -1246,6 +1261,7 @@ PyNumber_InPlaceAdd(PyObject *v, PyObject *w)
12461261 NB_SLOT (nb_add ), "+=" );
12471262 if (result == Py_NotImplemented ) {
12481263 PySequenceMethods * m = Py_TYPE (v )-> tp_as_sequence ;
1264+ Py_DECREF (result );
12491265 if (m != NULL ) {
12501266 binaryfunc func = m -> sq_inplace_concat ;
12511267 if (func == NULL )
@@ -1270,6 +1286,7 @@ PyNumber_InPlaceMultiply(PyObject *v, PyObject *w)
12701286 ssizeargfunc f = NULL ;
12711287 PySequenceMethods * mv = Py_TYPE (v )-> tp_as_sequence ;
12721288 PySequenceMethods * mw = Py_TYPE (w )-> tp_as_sequence ;
1289+ Py_DECREF (result );
12731290 if (mv != NULL ) {
12741291 f = mv -> sq_inplace_repeat ;
12751292 if (f == NULL )
@@ -1753,6 +1770,7 @@ PySequence_Concat(PyObject *s, PyObject *o)
17531770 PyObject * result = BINARY_OP1 (s , o , NB_SLOT (nb_add ), "+" );
17541771 if (result != Py_NotImplemented )
17551772 return result ;
1773+ Py_DECREF (result );
17561774 }
17571775 return type_error ("'%.200s' object can't be concatenated" , s );
17581776}
@@ -1783,6 +1801,7 @@ PySequence_Repeat(PyObject *o, Py_ssize_t count)
17831801 Py_DECREF (n );
17841802 if (result != Py_NotImplemented )
17851803 return result ;
1804+ Py_DECREF (result );
17861805 }
17871806 return type_error ("'%.200s' object can't be repeated" , o );
17881807}
@@ -1811,6 +1830,7 @@ PySequence_InPlaceConcat(PyObject *s, PyObject *o)
18111830 NB_SLOT (nb_add ), "+=" );
18121831 if (result != Py_NotImplemented )
18131832 return result ;
1833+ Py_DECREF (result );
18141834 }
18151835 return type_error ("'%.200s' object can't be concatenated" , s );
18161836}
@@ -1844,6 +1864,7 @@ PySequence_InPlaceRepeat(PyObject *o, Py_ssize_t count)
18441864 Py_DECREF (n );
18451865 if (result != Py_NotImplemented )
18461866 return result ;
1867+ Py_DECREF (result );
18471868 }
18481869 return type_error ("'%.200s' object can't be repeated" , o );
18491870}
0 commit comments