mirror of
https://github.com/python/cpython.git
synced 2025-11-25 21:11:09 +00:00
gh-106168: PyTuple_SET_ITEM() now checks the index (#106164)
PyTuple_SET_ITEM() and PyList_SET_ITEM() now check the index argument with an assertion if Python is built in debug mode or is built with assertions. * list_extend() and _PyList_AppendTakeRef() now set the list size before calling PyList_SET_ITEM(). * PyStructSequence_GetItem() and PyStructSequence_SetItem() now check the index argument: must be lesser than REAL_SIZE(op). * PyStructSequence_GET_ITEM() and PyStructSequence_SET_ITEM() are now aliases to PyStructSequence_GetItem() and PyStructSequence_SetItem().
This commit is contained in:
parent
161012fc25
commit
3f8483cad2
10 changed files with 63 additions and 24 deletions
|
|
@ -86,6 +86,10 @@ List Objects
|
|||
Macro form of :c:func:`PyList_SetItem` without error checking. This is
|
||||
normally only used to fill in new lists where there is no previous content.
|
||||
|
||||
Bounds checking is performed as an assertion if Python is built in
|
||||
:ref:`debug mode <debug-build>` or :option:`with assertions
|
||||
<--with-assertions>`.
|
||||
|
||||
.. note::
|
||||
|
||||
This macro "steals" a reference to *item*, and, unlike
|
||||
|
|
|
|||
|
|
@ -89,6 +89,9 @@ Tuple Objects
|
|||
Like :c:func:`PyTuple_SetItem`, but does no error checking, and should *only* be
|
||||
used to fill in brand new tuples.
|
||||
|
||||
Bounds checking is performed as an assertion if Python is built in
|
||||
:ref:`debug mode <debug-build>` or :option:`with assertions <--with-assertions>`.
|
||||
|
||||
.. note::
|
||||
|
||||
This function "steals" a reference to *o*, and, unlike
|
||||
|
|
@ -194,12 +197,17 @@ type.
|
|||
.. c:function:: PyObject* PyStructSequence_GetItem(PyObject *p, Py_ssize_t pos)
|
||||
|
||||
Return the object at position *pos* in the struct sequence pointed to by *p*.
|
||||
No bounds checking is performed.
|
||||
|
||||
Bounds checking is performed as an assertion if Python is built in
|
||||
:ref:`debug mode <debug-build>` or :option:`with assertions <--with-assertions>`.
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyStructSequence_GET_ITEM(PyObject *p, Py_ssize_t pos)
|
||||
|
||||
Macro equivalent of :c:func:`PyStructSequence_GetItem`.
|
||||
Alias to :c:func:`PyStructSequence_GetItem`.
|
||||
|
||||
.. versionchanged:: 3.13
|
||||
Now implemented as an alias to :c:func:`PyStructSequence_GetItem`.
|
||||
|
||||
|
||||
.. c:function:: void PyStructSequence_SetItem(PyObject *p, Py_ssize_t pos, PyObject *o)
|
||||
|
|
@ -208,6 +216,9 @@ type.
|
|||
:c:func:`PyTuple_SET_ITEM`, this should only be used to fill in brand new
|
||||
instances.
|
||||
|
||||
Bounds checking is performed as an assertion if Python is built in
|
||||
:ref:`debug mode <debug-build>` or :option:`with assertions <--with-assertions>`.
|
||||
|
||||
.. note::
|
||||
|
||||
This function "steals" a reference to *o*.
|
||||
|
|
@ -215,9 +226,7 @@ type.
|
|||
|
||||
.. c:function:: void PyStructSequence_SET_ITEM(PyObject *p, Py_ssize_t *pos, PyObject *o)
|
||||
|
||||
Similar to :c:func:`PyStructSequence_SetItem`, but implemented as a static
|
||||
inlined function.
|
||||
Alias to :c:func:`PyStructSequence_SetItem`.
|
||||
|
||||
.. note::
|
||||
|
||||
This function "steals" a reference to *o*.
|
||||
.. versionchanged:: 3.13
|
||||
Now implemented as an alias to :c:func:`PyStructSequence_SetItem`.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue