Skip to content

Commit

Permalink
pythongh-104265 Disallow instantiation of _csv.Reader and `_csv.Wri…
Browse files Browse the repository at this point in the history
…ter` (pythonGH-104266)

(cherry picked from commit 06c2a48)

Co-authored-by: chgnrdv <[email protected]>
  • Loading branch information
chgnrdv authored and miss-islington committed May 7, 2023
1 parent 19abf69 commit 0a7ec7e
Show file tree
Hide file tree
Showing 3 changed files with 14 additions and 3 deletions.
9 changes: 8 additions & 1 deletion Lib/test/test_csv.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import gc
import pickle
from test import support
from test.support import warnings_helper
from test.support import warnings_helper, import_helper, check_disallow_instantiation
from itertools import permutations
from textwrap import dedent
from collections import OrderedDict
Expand Down Expand Up @@ -1390,5 +1390,12 @@ def test_subclassable(self):
# issue 44089
class Foo(csv.Error): ...

@support.cpython_only
def test_disallow_instantiation(self):
_csv = import_helper.import_module("_csv")
for tp in _csv.Reader, _csv.Writer:
with self.subTest(tp=tp):
check_disallow_instantiation(self, tp)

if __name__ == '__main__':
unittest.main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Prevent possible crash by disallowing instantiation of the
:class:`!_csv.Reader` and :class:`!_csv.Writer` types.
The regression was introduced in 3.10.0a4 with PR 23224 (:issue:`14935`).
Patch by Radislav Chugunov.
4 changes: 2 additions & 2 deletions Modules/_csv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1000,7 +1000,7 @@ PyType_Spec Reader_Type_spec = {
.name = "_csv.reader",
.basicsize = sizeof(ReaderObj),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_IMMUTABLETYPE),
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION),
.slots = Reader_Type_slots
};

Expand Down Expand Up @@ -1425,7 +1425,7 @@ PyType_Spec Writer_Type_spec = {
.name = "_csv.writer",
.basicsize = sizeof(WriterObj),
.flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC |
Py_TPFLAGS_IMMUTABLETYPE),
Py_TPFLAGS_IMMUTABLETYPE | Py_TPFLAGS_DISALLOW_INSTANTIATION),
.slots = Writer_Type_slots,
};

Expand Down

0 comments on commit 0a7ec7e

Please sign in to comment.