diff options
author | chgnrdv <52372310+chgnrdv@users.noreply.github.com> | 2023-05-07 21:15:44 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-07 21:15:44 (GMT) |
commit | 06c2a4858b8806abc700a0471434067910db54ec (patch) | |
tree | 3a52fab053e06b01837db5c87732730e4c1dd2ea | |
parent | c0ece3dc9791694e960952ba74070efaaa79a676 (diff) | |
download | cpython-06c2a4858b8806abc700a0471434067910db54ec.zip cpython-06c2a4858b8806abc700a0471434067910db54ec.tar.gz cpython-06c2a4858b8806abc700a0471434067910db54ec.tar.bz2 |
gh-104265 Disallow instantiation of `_csv.Reader` and `_csv.Writer` (#104266)
-rw-r--r-- | Lib/test/test_csv.py | 9 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2023-05-07-19-56-45.gh-issue-104265.fVblry.rst | 4 | ||||
-rw-r--r-- | Modules/_csv.c | 4 |
3 files changed, 14 insertions, 3 deletions
diff --git a/Lib/test/test_csv.py b/Lib/test/test_csv.py index 8fb97bc..de7ac97 100644 --- a/Lib/test/test_csv.py +++ b/Lib/test/test_csv.py @@ -10,7 +10,7 @@ import csv 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 @@ -1430,5 +1430,12 @@ class MiscTestCase(unittest.TestCase): # 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() diff --git a/Misc/NEWS.d/next/Library/2023-05-07-19-56-45.gh-issue-104265.fVblry.rst b/Misc/NEWS.d/next/Library/2023-05-07-19-56-45.gh-issue-104265.fVblry.rst new file mode 100644 index 0000000..9c58284 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2023-05-07-19-56-45.gh-issue-104265.fVblry.rst @@ -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. diff --git a/Modules/_csv.c b/Modules/_csv.c index 0cde5c5..9ab2ad2 100644 --- a/Modules/_csv.c +++ b/Modules/_csv.c @@ -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 }; @@ -1431,7 +1431,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, }; |