[New-bugs-announce] [issue30459] PyList_SET_ITEM could be safer
Espie Marc
report at bugs.python.org
Wed May 24 11:14:12 EDT 2017
New submission from Espie Marc:
Documentation says PyList_SET_ITEM is void, but it lies. The macro is such that it yields the actual element being set.
wrapping the macro content in a do {} while (0) makes sure PyList_SET_ITEM is really void, e.g.:
#define PyList_SET_ITEM(op, i, v) do { (((PyListObject *)(op))->ob_item[i] = (v)); } while (0)
I just ran into the problem while compiling py-qt4 with clang.
There was some confusion between PyList_SET_ITEM and PyList_SetItem:
if (obj == NULL || PyList_SET_ITEM (l, i, obj) < 0)
g++ didn't catch it (because it doesn't see negative pointers as a problem), but clang++ instantly broke.
With PyList_SET_ITEM truly void the problem disappears.
----------
components: Interpreter Core
messages: 294362
nosy: espie
priority: normal
severity: normal
status: open
title: PyList_SET_ITEM could be safer
type: enhancement
versions: Python 3.6
_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue30459>
_______________________________________
More information about the New-bugs-announce
mailing list