diff options
author | Georg Brandl <georg@python.org> | 2008-07-16 22:04:20 +0000 |
---|---|---|
committer | Georg Brandl <georg@python.org> | 2008-07-16 22:04:20 +0000 |
commit | b9b68ae7a5176605ec482420cd8030bc56b144e1 (patch) | |
tree | c22ec878ba350076a314d8026177ebdfcfb1cc7f | |
parent | 86cbf81b47d8eca31ade71f8d6b0653167ffd922 (diff) | |
download | cpython-git-b9b68ae7a5176605ec482420cd8030bc56b144e1.tar.gz |
#3305: self->stream can be NULL.
-rw-r--r-- | Lib/test/test_multibytecodec.py | 9 | ||||
-rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 4 |
2 files changed, 11 insertions, 2 deletions
diff --git a/Lib/test/test_multibytecodec.py b/Lib/test/test_multibytecodec.py index f2b042cc7c..090374cdaf 100644 --- a/Lib/test/test_multibytecodec.py +++ b/Lib/test/test_multibytecodec.py @@ -8,6 +8,7 @@ from test import test_support from test import test_multibytecodec_support from test.test_support import TESTFN import unittest, StringIO, codecs, sys, os +import _multibytecodec ALL_CJKENCODINGS = [ # _codecs_cn @@ -53,6 +54,14 @@ class Test_MultibyteCodec(unittest.TestCase): finally: os.unlink(TESTFN) + def test_init_segfault(self): + # bug #3305: this used to segfault + self.assertRaises(AttributeError, + _multibytecodec.MultibyteStreamReader, None) + self.assertRaises(AttributeError, + _multibytecodec.MultibyteStreamWriter, None) + + class Test_IncrementalEncoder(unittest.TestCase): def test_stateless(self): diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index a1b0ca9180..2bd8b0dcce 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1484,7 +1484,7 @@ mbstreamreader_dealloc(MultibyteStreamReaderObject *self) { PyObject_GC_UnTrack(self); ERROR_DECREF(self->errors); - Py_DECREF(self->stream); + Py_XDECREF(self->stream); Py_TYPE(self)->tp_free(self); } @@ -1686,7 +1686,7 @@ mbstreamwriter_dealloc(MultibyteStreamWriterObject *self) { PyObject_GC_UnTrack(self); ERROR_DECREF(self->errors); - Py_DECREF(self->stream); + Py_XDECREF(self->stream); Py_TYPE(self)->tp_free(self); } |