8000 `Objects/memoryview.c`: protect macros expansion via `do { ... } whil… · python/cpython@d1942fa · GitHub
[go: up one dir, main page]

Skip to content

Commit d1942fa

Browse files
committed
Objects/memoryview.c: protect macros expansion via do { ... } while (0) constructions
1 parent 7050840 commit d1942fa

File tree

1 file changed

+41
-31
lines changed

1 file changed

+41
-31
lines changed

Objects/memoryobject.c

Lines changed: 41 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -183,45 +183,55 @@ PyTypeObject _PyManagedBuffer_Type = {
183183
(((PyMemoryViewObject *)mv)->flags&_Py_MEMORYVIEW_RELEASED || \
184184
((PyMemoryViewObject *)mv)->mbuf->flags&_Py_MANAGED_BUFFER_RELEASED)
185185

186-
#define CHECK_RELEASED(mv) \
187-
if (BASE_INACCESSIBLE(mv)) { \
188-
PyErr_SetString(PyExc_ValueError, \
189-
"operation forbidden on released memoryview object"); \
190-
return NULL; \
191-
}
186+
#define CHECK_RELEASED(MV) \
187+
do { \
188+
if (BASE_INACCESSIBLE(MV)) { \
189+
PyErr_SetString(PyExc_ValueError, \
190+
"operation forbidden on released memoryview object"); \
191+
return NULL; \
192+
} \
193+
} while (0)
192194

193-
#define CHECK_RELEASED_INT(mv) \
194-
if (BASE_INACCESSIBLE(mv)) { \
195-
PyErr_SetString(PyExc_ValueError, \
196-
"operation forbidden on released memoryview object"); \
197-
return -1; \
198-
}
195+
#define CHECK_RELEASED_INT(MV) \
196+
do { \
197+
if (BASE_INACCESSIBLE(MV)) { \
198+
PyErr_SetString(PyExc_ValueError, \
199+
"operation forbidden on released memoryview object"); \
200+
return -1; \
201+
} \
202+
} while (0)
199203

200-
#define CHECK_RESTRICTED(mv) \
201-
if (((PyMemoryViewObject *)(mv))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
202-
PyErr_SetString(PyExc_ValueError, \
203-
"cannot create new view on restricted memoryview"); \
204-
return NULL; \
205-
}
204+
#define CHECK_RESTRICTED(MV) \
205+
do { \
206+
if (((PyMemoryViewObject *)(MV))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
207+
PyErr_SetString(PyExc_ValueError, \
208+
"cannot create new view on restricted memoryview"); \
209+
return NULL; \
210+
} \
211+
} while (0)
206212

207-
#define CHECK_RESTRICTED_INT(mv) \
208-
if (((PyMemoryViewObject *)(mv))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
209-
PyErr_SetString(PyExc_ValueError, \
210-
"cannot create new view on restricted memoryview"); \
211-
return -1; \
212-
}
213+
#define CHECK_RESTRICTED_INT(MV) \
214+
do { \
215+
if (((PyMemoryViewObject *)(MV))->flags & _Py_MEMORYVIEW_RESTRICTED) { \
216+
PyErr_SetString(PyExc_ValueError, \
217+
"cannot create new view on restricted memoryview"); \
218+
return -1; \
219+
} \
220+
} while (0)
213221

214222
/* See gh-92888. These macros signal that we need to check the memoryview
215223
again due to possible read after frees. */
216224
#define CHECK_RELEASED_AGAIN(mv) CHECK_RELEASED(mv)
217225
#define CHECK_RELEASED_INT_AGAIN(mv) CHECK_RELEASED_INT(mv)
218226

219-
#define CHECK_LIST_OR_TUPLE(v) \
220-
if (!PyList_Check(v) && !PyTuple_Check(v)) { \
221-
PyErr_SetString(PyExc_TypeError, \
222-
#v " must be a list or a tuple"); \
223-
return NULL; \
224-
}
227+
#define CHECK_LIST_OR_TUPLE(OBJ) \
228+
do { \
229+
if (!PyList_Check(OBJ) && !PyTuple_Check(OBJ)) { \
230+
PyErr_SetString(PyExc_TypeError, \
231+
#OBJ " must be a list or a tuple"); \
232+
return NULL; \
233+
} \
234+
} while (0)
225235

226236
#define VIEW_ADDR(mv) (&((PyMemoryViewObject *)mv)->view)
227237

@@ -1456,7 +1466,7 @@ memoryview_cast_impl(PyMemoryViewObject *self, PyObject *format,
14561466
return NULL;
14571467
}
14581468
if (shape) {
1459-
CHECK_LIST_OR_TUPLE(shape)
1469+
CHECK_LIST_OR_TUPLE(shape);
14601470
ndim = PySequence_Fast_GET_SIZE(shape);
14611471
if (ndim > PyBUF_MAX_NDIM) {
14621472
PyErr_SetString(PyExc_ValueError,

0 commit comments

Comments
 (0)
0