Uh oh!
There was an error while loading. Please reload this page.
bpo-40077: Convert _csv module to use PyType_FromSpec - #20974
Conversation
corona10
commented
Jun 19, 2020
FYI, macOS CI issue is not related to this PR |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
vstinner
left a comment
There was a problem hiding this comment.
I'm not sure that it's possible to convert static types to heap types if they have Py_TPFLAGS_BASETYPE, since currently there is no way to retrieve the module from such type.
Uh oh!
There was an error while loading. Please reload this page.
| &strict)) | ||
| return NULL; | ||
| _csvstate *state = PyType_GetModuleState(type); |
There was a problem hiding this comment.
PyType_GetModuleState() is not safe if the type has Py_TPFLAGS_BASETYPE flag, which is the case here.
Is there a way to get the defining type in tp_new?
| PyErr_Format(_csvstate_global->error_obj, "field larger than field limit (%ld)", | ||
| _csvstate_global->field_limit); | ||
| PyTypeObject *reader_type = Py_TYPE(self); | ||
| _csvstate *state = PyType_GetModuleState(reader_type); |
There was a problem hiding this comment.
The Reader type has Py_TPFLAGS_BASETYPE: PyType_GetModuleState() is unsafe here.
| return NULL; | ||
| } | ||
| self->dialect = (DialectObj *)_call_dialect(dialect, keyword_args); | ||
| _csvstate *state = get_csv_state(module); |
There was a problem hiding this comment.
state can be moved at the beginning of the function, to avoid calling get_csv_state() twice.
bedevere-bot
commented
Jun 19, 2020
When you're done making the requested changes, leave the comment: |
vstinner
commented
Jun 22, 2020
I understand that this PR (if merged) would fix https://bugs.python.org/issue14935 |
encukou
commented
Dec 15, 2020
The issue is now closed via #23224. |
https://bugs.python.org/issue40077