summaryrefslogtreecommitdiff
path: root/Modules
diff options
context:
space:
mode:
Diffstat (limited to 'Modules')
-rw-r--r--Modules/_localemodule.c14
-rw-r--r--Modules/_sqlite/connection.c5
-rw-r--r--Modules/_sqlite/module.c5
-rw-r--r--Modules/cjkcodecs/multibytecodec.c4
-rw-r--r--Modules/posixmodule.c18
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);