8000 Merge pull request #449 from seberg/setobjref · numpy/numpy@78d0272 · GitHub
[go: up one dir, main page]

Skip to content

Commit 78d0272

Browse files
committed
Merge pull request #449 from seberg/setobjref
FIX: PyErr_SetObject does not steal reference (Ticket 2216)
2 parents 1ea1592 + 12e8079 commit 78d0272

9 files changed

+23
-0
lines changed

numpy/core/src/multiarray/array_assign.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ broadcast_error: {
7373
PyUString_ConcatAndDel(&errmsg,
7474
build_shape_string(ndim, shape));
7575
PyErr_SetObject(PyExc_ValueError, errmsg);
76+
Py_DECREF(errmsg);
7677

7778
return -1;
7879
}

numpy/core/src/multiarray/array_assign_array.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@ PyArray_AssignArray(PyArrayObject *dst, PyArrayObject *src,
284284
PyUString_FromFormat(" according to the rule %s",
285285
npy_casting_to_string(casting)));
286286
PyErr_SetObject(PyExc_TypeError, errmsg);
287+
Py_DECREF(errmsg);
287288
goto fail;
288289
}
289290

numpy/core/src/multiarray/array_assign_scalar.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ PyArray_AssignRawScalar(PyArrayObject *dst,
209209
PyUString_FromFormat(" according to the rule %s",
210210
npy_casting_to_string(casting)));
211211
PyErr_SetObject(PyExc_TypeError, errmsg);
212+
Py_DECREF(errmsg);
212213
return -1;
213214
}
214215

numpy/core/src/multiarray/ctors.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1818,6 +1818,7 @@ PyArray_FromArray(PyArrayObject *arr, PyArray_Descr *newtype, int flags)
18181818
PyUString_FromFormat(" according to the rule %s",
18191819
npy_casting_to_string(casting)));
18201820
PyErr_SetObject(PyExc_TypeError, errmsg);
1821+
Py_DECREF(errmsg);
18211822

18221823
Py_DECREF(newtype);
18231824
return NULL;

numpy/core/src/multiarray/datetime.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1489,6 +1489,7 @@ raise_if_datetime64_metadata_cast_error(char *object_type,
14891489
PyUString_FromFormat(" according to the rule %s",
14901490
npy_casting_to_string(casting)));
14911491
PyErr_SetObject(PyExc_TypeError, errmsg);
1492+
Py_DECREF(errmsg);
14921493
return -1;
14931494
}
14941495
}
@@ -1520,6 +1521,7 @@ raise_if_timedelta64_metadata_cast_error(char *object_type,
15201521
PyUString_FromFormat(" according to the rule %s",
15211522
npy_casting_to_string(casting)));
15221523
PyErr_SetObject(PyExc_TypeError, errmsg);
1524+
Py_DECREF(errmsg);
15231525
return -1;
15241526
}
15251527
}
@@ -1654,6 +1656,7 @@ incompatible_units: {
16541656
PyUString_FromString(" because they have "
16551657
"incompatible nonlinear base time units"));
16561658
PyErr_SetObject(PyExc_TypeError, errmsg);
1659+
Py_DECREF(errmsg);
16571660
return -1;
16581661
}
16591662
units_overflow: {
@@ -1666,6 +1669,7 @@ units_overflow: {
16661669
PyUString_FromString(" and "));
16671670
errmsg = append_metastr_to_string(meta2, 0, errmsg);
16681671
PyErr_SetObject(PyExc_OverflowError, errmsg);
1672+
Py_DECREF(errmsg);
16691673
return -1;
16701674
}
16711675
}
@@ -1813,6 +1817,7 @@ convert_datetime_metadata_tuple_to_datetime_metadata(PyObject *tuple,
18131817
"datetime metadata conversion, not ");
18141818
PyUString_ConcatAndDel(&errmsg, PyObject_Repr(tuple));
18151819
PyErr_SetObject(PyExc_TypeError, errmsg);
1820+
Py_DECREF(errmsg);
18161821
return -1;
18171822
}
18181823

numpy/core/src/multiarray/descriptor.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2538,6 +2538,7 @@ arraydescr_setstate(PyArray_Descr *self, PyObject *args)
25382538
errmsg = PyUString_FromString("Invalid datetime dtype (metadata, c_metadata): ");
25392539
PyUString_ConcatAndDel(&errmsg, PyObject_Repr(metadata));
25402540
PyErr_SetObject(PyExc_ValueError, errmsg);
2541+
Py_DECREF(errmsg);
25412542
return NULL;
25422543
}
25432544

numpy/core/src/multiarray/methods.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,7 @@ array_astype(PyArrayObject *self, PyObject *args, PyObject *kwds)
858858
PyUString_FromFormat(" according to the rule %s",
859859
npy_casting_to_string(casting)));
860860
PyErr_SetObject(PyExc_TypeError, errmsg);
861+
Py_DECREF(errmsg);
861862
Py_DECREF(dtype);
862863
return NULL;
863864
}

numpy/core/src/multiarray/nditer_constr.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1337,6 +1337,7 @@ npyiter_check_casting(int nop, PyArrayObject **op,
13371337
PyUString_FromFormat(" according to the rule %s",
13381338
npyiter_casting_to_string(casting)));
13391339
PyErr_SetObject(PyExc_TypeError, errmsg);
1340+
Py_DECREF(errmsg);
13401341
return 0;
13411342
}
13421343
/* Check write (temp -> op) casting */
@@ -1359,6 +1360,7 @@ npyiter_check_casting(int nop, PyArrayObject **op,
13591360
(int)iop,
13601361
npyiter_casting_to_string(casting)));
13611362
PyErr_SetObject(PyExc_TypeError, errmsg);
1363+
Py_DECREF(errmsg);
13621364
return 0;
13631365
}
13641366

@@ -1738,6 +1740,7 @@ broadcast_error: {
17381740

17391741
}
17401742
PyErr_SetObject(PyExc_ValueError, errmsg);
1743+
Py_DECREF(errmsg);
17411744
}
17421745
else {
17431746
errmsg = PyUString_FromString("operands could not be broadcast "
@@ -1804,6 +1807,7 @@ broadcast_error: {
18041807

18051808
}
18061809
PyErr_SetObject(PyExc_ValueError, errmsg);
1810+
Py_DECREF(errmsg);
18071811
}
18081812

18091813
return 0;
@@ -1890,6 +1894,7 @@ operand_different_than_broadcast: {
18901894
}
18911895

18921896
PyErr_SetObject(PyExc_ValueError, errmsg);
1897+
Py_DECREF(errmsg);
18931898

18941899
return 0;
18951900
}

numpy/core/src/umath/ufunc_type_resolution.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,7 @@ PyUFunc_ValidateCasting(PyUFuncObject *ufunc,
7777
PyUString_FromFormat(" with casting rule %s",
7878
npy_casting_to_string(casting)));
7979
PyErr_SetObject(PyExc_TypeError, errmsg);
80+
Py_DECREF(errmsg);
8081
return -1;
8182
}
8283
} else if (operands[i] != NULL) {
@@ -95,6 +96,7 @@ PyUFunc_ValidateCasting(PyUFuncObject *ufunc,
9596
PyUString_FromFormat(" with casting rule %s",
9697
npy_casting_to_string(casting)));
9798
PyErr_SetObject(PyExc_TypeError, errmsg);
99+
Py_DECREF(errmsg);
98100
return -1;
99101
}
100102
}
@@ -725,6 +727,7 @@ type_reso_error: {
725727
PyUString_ConcatAndDel(&errmsg,
726728
PyObject_Repr((PyObject *)PyArray_DESCR(operands[1])));
727729
PyErr_SetObject(PyExc_TypeError, errmsg);
730+
Py_DECREF(errmsg);
728731
return -1;
729732
}
730733
}
@@ -895,6 +898,7 @@ type_reso_error: {
895898
PyUString_ConcatAndDel(&errmsg,
896899
PyObject_Repr((PyObject *)PyArray_DESCR(operands[1])));
897900
PyErr_SetObject(PyExc_TypeError, errmsg);
901+
Py_DECREF(errmsg);
898902
return -1;
899903
}
900904
}
@@ -1038,6 +1042,7 @@ type_reso_error: {
10381042
PyUString_ConcatAndDel(&errmsg,
10391043
PyObject_Repr((PyObject *)PyArray_DESCR(operands[1])));
10401044
PyErr_SetObject(PyExc_TypeError, errmsg);
1045+
Py_DECREF(errmsg);
10411046
return -1;
10421047
}
10431048
}
@@ -1157,6 +1162,7 @@ type_reso_error: {
11571162
PyUString_ConcatAndDel(&errmsg,
11581163
PyObject_Repr((PyObject *)PyArray_DESCR(operands[1])));
11591164
PyErr_SetObject(PyExc_TypeError, errmsg);
1165+
Py_DECREF(errmsg);
11601166
return -1;
11611167
}
11621168
}
@@ -1273,6 +1279,7 @@ PyUFunc_DefaultLegacyInnerLoopSelector(PyUFuncObject *ufunc,
12731279
}
12741280
}
12751281
PyErr_SetObject(PyExc_TypeError, errmsg);
1282+
Py_DECREF(errmsg);
12761283

12771284
return -1;
12781285
}

0 commit comments

Comments
 (0)
0