diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 37b7ec1..8441f1e 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -530,7 +530,7 @@
 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 @@
 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 @@
 {
 	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 @@
 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 b2cca80..1e52918 100644
--- a/Modules/_sqlite/connection.c
+++ b/Modules/_sqlite/connection.c
@@ -902,8 +902,13 @@
         }
 
         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 3f209eb..084eac1 100644
--- a/Modules/_sqlite/module.c
+++ b/Modules/_sqlite/module.c
@@ -147,6 +147,7 @@
 {
     PyTypeObject* type;
     PyObject* caster;
+    int rc;
 
     if (!PyArg_ParseTuple(args, "OO", &type, &caster)) {
         return NULL;
@@ -159,7 +160,9 @@
         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 d6bafe7..e65a9a4 100644
--- a/Modules/cjkcodecs/multibytecodec.c
+++ b/Modules/cjkcodecs/multibytecodec.c
@@ -1502,7 +1502,7 @@
 {
 	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 @@
 {
 	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 bc17b6b..4cdaf25 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -2350,11 +2350,19 @@
 		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 @@
 		}
 		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);
 
