Skip to content

Commit 48c30fd

Browse files
committed
Fix PyTuple_SetItemRef(NULL)
1 parent c74582b commit 48c30fd

3 files changed

Lines changed: 35 additions & 2 deletions

File tree

Objects/tupleobject.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ PyTuple_SetItem(PyObject *op, Py_ssize_t i, PyObject *newitem)
190190
int
191191
PyTuple_SetItemRef(PyObject *op, Py_ssize_t i, PyObject *newitem)
192192
{
193-
Py_INCREF(newitem);
193+
Py_XINCREF(newitem);
194194
return PyTuple_SetItem(op, i, newitem);
195195
}
196196

capi_tests/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ PYTHON_LDFLAGS=-l $(LIBPYTHON) -L $(CPYTHON_SRC)
55
CFLAGS=$(shell pkg-config check --cflags) $(PYTHON_CFLAGS)
66
LDFLAGS=$(shell pkg-config check --libs) $(PYTHON_LDFLAGS)
77
SOURCES=runtests.c test_object.c test_tuple.c
8-
ENV_RUNTEST=LD_LIBRARY_PATH=$(CPYTHON_SRC) PYTHONPATH=$(CPYTHON_SRC)/Lib
8+
9+
#ENV_RUNTEST=LD_LIBRARY_PATH=$(CPYTHON_SRC) PYTHONPATH=$(CPYTHON_SRC)/Lib
910
# CK_FORK=no to detect reference leaks
1011
ENV_RUNTEST=CK_FORK=no LD_LIBRARY_PATH=$(CPYTHON_SRC) PYTHONPATH=$(CPYTHON_SRC)/Lib
1112

capi_tests/test_tuple.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,38 @@ check_PyTuple_SetItemRef(func_type ftype)
276276
Py_DECREF(obj2);
277277
}
278278
Py_DECREF(tuple);
279+
280+
/* Tuple items set explicitly to NULL */
281+
tuple = PyTuple_New(size);
282+
ck_assert_ptr_nonnull(tuple);
283+
for (size_t i = 0; i < size; i++) {
284+
switch (ftype)
285+
{
286+
case STRONG:
287+
{
288+
int res = PyTuple_SetItemRef(tuple, i, NULL);
289+
ck_assert_int_eq(res, 0);
290+
break;
291+
}
292+
#ifndef Py_NEWCAPI
293+
case BORROW:
294+
{
295+
int res = PyTuple_SetItem(tuple, i, NULL);
296+
ck_assert_int_eq(res, 0);
297+
break;
298+
}
299+
case MACRO:
300+
{
301+
PyTuple_SET_ITEM(tuple, i, NULL);
302+
break;
303+
}
304+
#endif
305+
}
306+
307+
PyObject *item = PyTuple_GetItemRef(tuple, i);
308+
ck_assert_ptr_null(item);
309+
}
310+
Py_DECREF(tuple);
279311
}
280312

281313

0 commit comments

Comments
 (0)