8000 fix UBSan failures for `PySyntaxErrorObject` · python/cpython@2640a34 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2640a34

Browse files
committed
fix UBSan failures for PySyntaxErrorObject
1 parent 9d3c8b8 commit 2640a34

File tree

1 file changed

+21
-10
lines changed

1 file changed

+21
-10
lines changed

Objects/exceptions.c

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2494,15 +2494,23 @@ ComplexExtendsException(PyExc_Exception, AttributeError,
24942494
* SyntaxError extends Exception
24952495
*/
24962496

2497+
static inline PySyntaxErrorObject *
2498+
_PySyntaxError_CAST(PyObject *self)
2499+
{
2500+
assert(PyObject_TypeCheck(self, (PyTypeObject *)PyExc_SyntaxError));
2501+
return (PySyntaxErrorObject *)self;
2502+
}
2503+
24972504
static int
2498-
SyntaxError_init(PySyntaxErrorObject *self, PyObject *args, PyObject *kwds)
2505+
SyntaxError_init(PyObject *op, PyObject *args, PyObject *kwds)
24992506
{
25002507
PyObject *info = NULL;
25012508
Py_ssize_t lenargs = PyTuple_GET_SIZE(args);
25022509

2503-
if (BaseException_init((PyBaseExceptionObject *)self, args, kwds) == -1)
2510+
if (BaseException_init(op, args, kwds) == -1)
25042511
return -1;
25052512

2513+
PySyntaxErrorObject *self = _PySyntaxError_CAST(op);
25062514
if (lenargs >= 1) {
25072515
Py_XSETREF(self->msg, Py_NewRef(PyTuple_GET_ITEM(args, 0)));
25082516
}
@@ -2540,8 +2548,9 @@ SyntaxError_init(PySyntaxErrorObject *self, PyObject *args, PyObject *kwds)
25402548
}
25412549

25422550
static int
2543-
SyntaxError_clear(PySyntaxErrorObject *self)
2551+
SyntaxError_clear(PyObject *op)
25442552
{
2553+
PySyntaxErrorObject *self = _PySyntaxError_CAST(op);
25452554
Py_CLEAR(self->msg);
25462555
Py_CLEAR(self->filename);
25472556
Py_CLEAR(self->lineno);
@@ -2550,20 +2559,21 @@ SyntaxError_clear(PySyntaxErrorObject *self)
25502559
Py_CLEAR(self->end_offset);
25512560
Py_CLEAR(self->text);
25522561
Py_CLEAR(self->print_file_and_line);
2553-
return BaseException_clear((PyBaseExceptionObject *)self);
2562+
return BaseException_clear(op);
25542563
}
25552564

25562565
static void
2557-
SyntaxError_dealloc(PySyntaxErrorObject *self)
2566+
SyntaxError_dealloc(PyObject *self)
25582567
{
25592568
_PyObject_GC_UNTRACK(self);
2560-
SyntaxError_clear(self);
2561-
Py_TYPE(self)->tp_free((PyObject *)self);
2569+
(void)SyntaxError_clear(self);
2570+
Py_TYPE(self)->tp_free(self);
25622571
}
25632572

25642573
static int
2565-
SyntaxError_traverse(PySyntaxErrorObject *self, visitproc visit, void *arg)
2574+
SyntaxError_traverse(PyObject *op, visitproc visit, void *arg)
25662575
{
2576+
PySyntaxErrorObject *self = _PySyntaxError_CAST(op);
25672577
Py_VISIT(self->msg);
25682578
Py_VISIT(self->filename);
25692579
Py_VISIT(self->lineno);
@@ -2572,7 +2582,7 @@ SyntaxError_traverse(PySyntaxErrorObject *self, visitproc visit, void *arg)
25722582
Py_VISIT(self->end_offset);
25732583
Py_VISIT(self->text);
25742584
Py_VISIT(self->print_file_and_line);
2575-
return BaseException_traverse((PyBaseExceptionObject *)self, visit, arg);
2585+
return BaseException_traverse(op, visit, arg);
25762586
}
25772587

25782588
/* This is called "my_basename" instead of just "basename" to avoid name
@@ -2604,8 +2614,9 @@ my_basename(PyObject *name)
26042614

26052615

26062616
static PyObject *
2607-
SyntaxError_str(PySyntaxErrorObject *self)
2617+
SyntaxError_str(PyObject *op)
26082618
{
2619+
PySyntaxErrorObject *self = _PySyntaxError_CAST(op);
26092620
int have_lineno = 0;
26102621
PyObject *filename;
26112622
PyObject *result;

0 commit comments

Comments
 (0)
0