summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorchgnrdv <52372310+chgnrdv@users.noreply.github.com>2023-05-07 21:15:44 (GMT)
committerGitHub <noreply@github.com>2023-05-07 21:15:44 (GMT)
commit06c2a4858b8806abc700a0471434067910db54ec (patch)
tree3a52fab053e06b01837db5c87732730e4c1dd2ea
parentc0ece3dc9791694e960952ba74070efaaa79a676 (diff)
downloadcpython-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.py9
-rw-r--r--Misc/NEWS.d/next/Library/2023-05-07-19-56-45.gh-issue-104265.fVblry.rst4
-rw-r--r--Modules/_csv.c4
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,
};