diff options
Diffstat (limited to 'Modules')
| -rw-r--r-- | Modules/_localemodule.c | 14 | ||||
| -rw-r--r-- | Modules/_sqlite/connection.c | 5 | ||||
| -rw-r--r-- | Modules/_sqlite/module.c | 5 | ||||
| -rw-r--r-- | Modules/cjkcodecs/multibytecodec.c | 4 | ||||
| -rw-r--r-- | Modules/posixmodule.c | 18 |
5 files changed, 30 insertions, 16 deletions
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c index 37b7ec180b..8441f1e523 100644 --- a/Modules/_localemodule.c +++ b/Modules/_localemodule.c @@ -530,7 +530,7 @@ static PyObject* PyIntl_gettext(PyObject* self, PyObject *args) { char *in; - if (!PyArg_ParseTuple(args, "z", &in)) + if (!PyArg_ParseTuple(args, "s", &in)) return 0; return str2uni(gettext(in)); } @@ -543,7 +543,7 @@ static PyObject* PyIntl_dgettext(PyObject* self, PyObject *args) { char *domain, *in; - if (!PyArg_ParseTuple(args, "zz", &domain, &in)) + if (!PyArg_ParseTuple(args, "zs", &domain, &in)) return 0; return str2uni(dgettext(domain, in)); } @@ -557,7 +557,7 @@ PyIntl_dcgettext(PyObject *self, PyObject *args) { char *domain, *msgid; int category; - if (!PyArg_ParseTuple(args, "zzi", &domain, &msgid, &category)) + if (!PyArg_ParseTuple(args, "zsi", &domain, &msgid, &category)) return 0; return str2uni(dcgettext(domain,msgid,category)); } @@ -587,9 +587,13 @@ PyDoc_STRVAR(bindtextdomain__doc__, static PyObject* PyIntl_bindtextdomain(PyObject* self,PyObject*args) { - char *domain,*dirname; - if (!PyArg_ParseTuple(args, "zz", &domain, &dirname)) + char *domain, *dirname; + if (!PyArg_ParseTuple(args, "sz", &domain, &dirname)) return 0; + if (!strlen(domain)) { + PyErr_SetString(Error, "domain must be a non-empty string"); + return 0; + } dirname = bindtextdomain(domain, dirname); if (!dirname) { PyErr_SetFromErrno(PyExc_OSError); diff --git a/Modules/_sqlite/connection.c b/Modules/_sqlite/connection.c index b2cca807eb..1e529187cb 100644 --- a/Modules/_sqlite/connection.c +++ b/Modules/_sqlite/connection.c @@ -902,8 +902,13 @@ static int pysqlite_connection_set_isolation_level(pysqlite_Connection* self, Py } statement = PyUnicode_AsStringAndSize(begin_statement, &size); + if (!statement) { + Py_DECREF(statement); + return -1; + } self->begin_statement = PyMem_Malloc(size + 2); if (!self->begin_statement) { + Py_DECREF(begin_statement); return -1; } diff --git a/Modules/_sqlite/module.c b/Modules/_sqlite/module.c index 3f209eb866..084eac170e 100644 --- a/Modules/_sqlite/module.c +++ b/Modules/_sqlite/module.c @@ -147,6 +147,7 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args) { PyTypeObject* type; PyObject* caster; + int rc; if (!PyArg_ParseTuple(args, "OO", &type, &caster)) { return NULL; @@ -159,7 +160,9 @@ static PyObject* module_register_adapter(PyObject* self, PyObject* args) pysqlite_BaseTypeAdapted = 1; } - microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster); + rc = microprotocols_add(type, (PyObject*)&pysqlite_PrepareProtocolType, caster); + if (rc == -1) + return NULL; Py_INCREF(Py_None); return Py_None; diff --git a/Modules/cjkcodecs/multibytecodec.c b/Modules/cjkcodecs/multibytecodec.c index d6bafe76cf..e65a9a4fb7 100644 --- a/Modules/cjkcodecs/multibytecodec.c +++ b/Modules/cjkcodecs/multibytecodec.c @@ -1502,7 +1502,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); } @@ -1705,7 +1705,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); } diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index bc17b6b049..4cdaf253e5 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -2350,11 +2350,19 @@ posix_listdir(PyObject *self, PyObject *args) return NULL; } for (;;) { + errno = 0; Py_BEGIN_ALLOW_THREADS ep = readdir(dirp); Py_END_ALLOW_THREADS - if (ep == NULL) - break; + if (ep == NULL) { + if (errno == 0) { + break; + } else { + closedir(dirp); + Py_DECREF(d); + return posix_error_with_allocated_filename(name); + } + } if (ep->d_name[0] == '.' && (NAMLEN(ep) == 1 || (ep->d_name[1] == '.' && NAMLEN(ep) == 2))) @@ -2389,12 +2397,6 @@ posix_listdir(PyObject *self, PyObject *args) } Py_DECREF(v); } - if (errno != 0 && d != NULL) { - /* readdir() returned NULL and set errno */ - closedir(dirp); - Py_DECREF(d); - return posix_error_with_allocated_filename(name); - } closedir(dirp); PyMem_Free(name); |
