]> granicus.if.org Git - python/commitdiff
Add assertion to _PyTuple_CAST(op) (GH-10712)
authorVictor Stinner <vstinner@redhat.com>
Mon, 26 Nov 2018 12:37:13 +0000 (13:37 +0100)
committerGitHub <noreply@github.com>
Mon, 26 Nov 2018 12:37:13 +0000 (13:37 +0100)
Add "assert(PyTuple_Check(op));" to _PyTuple_CAST() to check that the
argument is a tuple object in debug mode.

PyTuple_GET_SIZE() now uses _PyTuple_CAST() to get its assertion.

Include/tupleobject.h

index eec2d98f2d95754d05176939fcc3ad62c7043c34..75574bc43fb3be1d0456ac1cf7c7e31f7e43813c 100644 (file)
@@ -56,10 +56,10 @@ PyAPI_FUNC(void) _PyTuple_MaybeUntrack(PyObject *);
 /* Macro, trading safety for speed */
 #ifndef Py_LIMITED_API
 /* Cast argument to PyTupleObject* type. */
-#define _PyTuple_CAST(op) ((PyTupleObject *)(op))
+#define _PyTuple_CAST(op) (assert(PyTuple_Check(op)), (PyTupleObject *)(op))
 
 #define PyTuple_GET_ITEM(op, i) (_PyTuple_CAST(op)->ob_item[i])
-#define PyTuple_GET_SIZE(op)    (assert(PyTuple_Check(op)), Py_SIZE(op))
+#define PyTuple_GET_SIZE(op)    Py_SIZE(_PyTuple_CAST(op))
 
 /* Macro, *only* to be used to fill in brand new tuples */
 #define PyTuple_SET_ITEM(op, i, v) (_PyTuple_CAST(op)->ob_item[i] = v)