aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-12-07 11:56:20 +0100
committerGitHub <noreply@github.com>2020-12-07 11:56:20 +0100
commit0ef96c2b2a291c9d2d9c0ba42bbc1900a21e65f3 (patch)
treeb7f921c6b76994932e2845ceff1853a6149f4fb3
parentbpo-41889: [Enum] fix multiple-inheritance regression (GH-22487) (diff)
downloadcpython-0ef96c2b2a291c9d2d9c0ba42bbc1900a21e65f3.tar.gz
cpython-0ef96c2b2a291c9d2d9c0ba42bbc1900a21e65f3.tar.bz2
cpython-0ef96c2b2a291c9d2d9c0ba42bbc1900a21e65f3.zip
bpo-30459: Cast the result of PyCell_SET to void (GH-23654)
-rw-r--r--Doc/whatsnew/3.10.rst7
-rw-r--r--Include/cellobject.h2
-rw-r--r--Misc/NEWS.d/next/C API/2020-05-06-23-54-57.bpo-30459.N9_Jai.rst8
3 files changed, 14 insertions, 3 deletions
diff --git a/Doc/whatsnew/3.10.rst b/Doc/whatsnew/3.10.rst
index 019dd1817d2..a5cb4e30616 100644
--- a/Doc/whatsnew/3.10.rst
+++ b/Doc/whatsnew/3.10.rst
@@ -611,6 +611,13 @@ Porting to Python 3.10
:ref:`Python Path Configuration. <init-path-config>`.
(Contributed by Victor Stinner in :issue:`42260`.)
+* :c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and
+ :c:func:`PyCell_SET` macros can no longer be used as l-value or r-value.
+ For example, ``x = PyList_SET_ITEM(a, b, c)`` and
+ ``PyList_SET_ITEM(a, b, c) = x`` now fail with a compiler error. It prevents
+ bugs like ``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test.
+ (Contributed by Zackery Spytz and Victor Stinner in :issue:`30459`.)
+
Deprecated
----------
diff --git a/Include/cellobject.h b/Include/cellobject.h
index f12aa90a42a..81bc784d36f 100644
--- a/Include/cellobject.h
+++ b/Include/cellobject.h
@@ -20,7 +20,7 @@ PyAPI_FUNC(PyObject *) PyCell_Get(PyObject *);
PyAPI_FUNC(int) PyCell_Set(PyObject *, PyObject *);
#define PyCell_GET(op) (((PyCellObject *)(op))->ob_ref)
-#define PyCell_SET(op, v) (((PyCellObject *)(op))->ob_ref = v)
+#define PyCell_SET(op, v) ((void)(((PyCellObject *)(op))->ob_ref = v))
#ifdef __cplusplus
}
diff --git a/Misc/NEWS.d/next/C API/2020-05-06-23-54-57.bpo-30459.N9_Jai.rst b/Misc/NEWS.d/next/C API/2020-05-06-23-54-57.bpo-30459.N9_Jai.rst
index e3ee6dccdaa..092d457855a 100644
--- a/Misc/NEWS.d/next/C API/2020-05-06-23-54-57.bpo-30459.N9_Jai.rst
+++ b/Misc/NEWS.d/next/C API/2020-05-06-23-54-57.bpo-30459.N9_Jai.rst
@@ -1,2 +1,6 @@
-Cast the result of :c:func:`PyList_SET_ITEM` and :c:func:`PyTuple_SET_ITEM`
-to void.
+:c:func:`PyList_SET_ITEM`, :c:func:`PyTuple_SET_ITEM` and :c:func:`PyCell_SET`
+macros can no longer be used as l-value or r-value. For example,
+``x = PyList_SET_ITEM(a, b, c)`` and ``PyList_SET_ITEM(a, b, c) = x`` now fail
+with a compiler error. It prevents bugs like
+``if (PyList_SET_ITEM (a, b, c) < 0) ...`` test.
+Patch by Zackery Spytz and Victor Stinner.