diff --git a/Lib/decimal.py b/Lib/decimal.py
index a545cf8..795b40f 100644
--- a/Lib/decimal.py
+++ b/Lib/decimal.py
@@ -5061,7 +5061,7 @@
         log_tenpower = f*M # exact
     else:
         log_d = 0  # error < 2.31
-        log_tenpower = div_nearest(f, 10**-p) # error < 0.5
+        log_tenpower = _div_nearest(f, 10**-p) # error < 0.5
 
     return _div_nearest(log_tenpower+log_d, 100)
 
diff --git a/Misc/NEWS b/Misc/NEWS
index 2ae121a..9c07eee 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,14 @@
 Core and Builtins
 -----------------
 
+- Fix crashes on memory allocation failure found with failmalloc.
+
+- Fix memory leaks found with valgrind and update suppressions file.
+
+- Fix compiler warnings in opt mode which would lead to invalid memory reads.
+
+- Fix problem using wrong name in decimal module reported by pychecker.
+
 - Issue #3642: Changed type of numarenas from uint to size_t
   in order to silence a compilier warning on 64bit OSes.
 
diff --git a/Misc/valgrind-python.supp b/Misc/valgrind-python.supp
index a08eaac..e50fc4b 100644
--- a/Misc/valgrind-python.supp
+++ b/Misc/valgrind-python.supp
@@ -47,6 +47,39 @@
 #
 
 {
+   Suppress leaking the GIL.  Happens once per process, see comment in ceval.c.
+   Memcheck:Leak
+   fun:malloc
+   fun:PyThread_allocate_lock
+   fun:PyEval_InitThreads
+}
+
+{
+   Suppress leaking the GIL after a fork.
+   Memcheck:Leak
+   fun:malloc
+   fun:PyThread_allocate_lock
+   fun:PyEval_ReInitThreads
+}
+
+{
+   Suppress leaking the autoTLSkey.  This looks like it shouldn't leak though.
+   Memcheck:Leak
+   fun:malloc
+   fun:PyThread_create_key
+   fun:_PyGILState_Init
+   fun:Py_InitializeEx
+   fun:Py_Main
+}
+
+{
+   Hmmm, is this a real leak or like the GIL?
+   Memcheck:Leak
+   fun:malloc
+   fun:PyThread_ReInitTLS
+}
+
+{
    Handle PyMalloc confusing valgrind (possibly leaked)
    Memcheck:Leak
    fun:realloc
diff --git a/Modules/_ctypes/stgdict.c b/Modules/_ctypes/stgdict.c
index cd38ecd..dabf9f1 100644
--- a/Modules/_ctypes/stgdict.c
+++ b/Modules/_ctypes/stgdict.c
@@ -416,6 +416,7 @@
 		ffi_ofs = 0;
 	}
 
+	assert(stgdict->format == NULL);
 	if (isStruct && !isPacked) {
 		stgdict->format = alloc_format_string(NULL, "T{");
 	} else {
@@ -539,7 +540,9 @@
 #undef realdict
 
 	if (isStruct && !isPacked) {
+		char *ptr = stgdict->format;
 		stgdict->format = alloc_format_string(stgdict->format, "}");
+		PyMem_Free(ptr);
 		if (stgdict->format == NULL)
 			return -1;
 	}
diff --git a/Modules/_fileio.c b/Modules/_fileio.c
index 58462dd..6b3a98d 100644
--- a/Modules/_fileio.c
+++ b/Modules/_fileio.c
@@ -278,6 +278,7 @@
 	ret = -1;
 
  done:
+	PyMem_Free(name);
 	return ret;
 }
 
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index e297240..628780f 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -784,7 +784,8 @@
 #if defined (HAVE_SETITIMER) || defined (HAVE_GETITIMER)
     ItimerError = PyErr_NewException("signal.ItimerError", 
          PyExc_IOError, NULL);
-    PyDict_SetItemString(d, "ItimerError", ItimerError);
+    if (ItimerError != NULL)
+    	PyDict_SetItemString(d, "ItimerError", ItimerError);
 #endif
 
         if (!PyErr_Occurred())
diff --git a/Objects/stringlib/formatter.h b/Objects/stringlib/formatter.h
index b964435..aa99123 100644
--- a/Objects/stringlib/formatter.h
+++ b/Objects/stringlib/formatter.h
@@ -641,7 +641,10 @@
 	    /* We know this can't fail, since we've already
 	       reserved enough space. */
 	    STRINGLIB_CHAR *pstart = p + n_leading_chars;
-	    int r = STRINGLIB_GROUPING(pstart, n_digits, n_digits,
+#ifndef NDEBUG
+	    int r =
+#endif
+		STRINGLIB_GROUPING(pstart, n_digits, n_digits,
 			   spec.n_total+n_grouping_chars-n_leading_chars,
 			   NULL, 0);
 	    assert(r);
diff --git a/Objects/structseq.c b/Objects/structseq.c
index b6126ba..ad246a1 100644
--- a/Objects/structseq.c
+++ b/Objects/structseq.c
@@ -32,6 +32,8 @@
 	PyStructSequence *obj;
 
 	obj = PyObject_New(PyStructSequence, type);
+	if (obj == NULL)
+		return NULL;
 	Py_SIZE(obj) = VISIBLE_SIZE_TP(type);
 
 	return (PyObject*) obj;
@@ -522,10 +524,16 @@
 	Py_INCREF(type);
 
 	dict = type->tp_dict;
-	PyDict_SetItemString(dict, visible_length_key, 
-		       PyInt_FromLong((long) desc->n_in_sequence));
-	PyDict_SetItemString(dict, real_length_key, 
-		       PyInt_FromLong((long) n_members));
-	PyDict_SetItemString(dict, unnamed_fields_key, 
-		       PyInt_FromLong((long) n_unnamed_members));
+#define SET_DICT_FROM_INT(key, value)				\
+	do {							\
+		PyObject *v = PyInt_FromLong((long) value);	\
+		if (v != NULL) {				\
+			PyDict_SetItemString(dict, key, v);	\
+			Py_DECREF(v);				\
+		}						\
+	} while (0)
+
+	SET_DICT_FROM_INT(visible_length_key, desc->n_in_sequence);
+	SET_DICT_FROM_INT(real_length_key, n_members);
+	SET_DICT_FROM_INT(unnamed_fields_key, n_unnamed_members);
 }
diff --git a/Python/getargs.c b/Python/getargs.c
index 7c9774f..766a2d7 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -1312,7 +1312,7 @@
 }
 
 static int
-getbuffer(PyObject *arg, Py_buffer *view, char**errmsg)
+getbuffer(PyObject *arg, Py_buffer *view, char **errmsg)
 {
 	void *buf;
 	Py_ssize_t count;
@@ -1322,8 +1322,10 @@
 		return -1;
 	}
 	if (pb->bf_getbuffer) {
-		if (pb->bf_getbuffer(arg, view, 0) < 0)
+		if (pb->bf_getbuffer(arg, view, 0) < 0) {
+			*errmsg = "convertible to a buffer";
 			return -1;
+		}
 		if (!PyBuffer_IsContiguous(view, 'C')) {
 			*errmsg = "contiguous buffer";
 			return -1;
@@ -1332,8 +1334,10 @@
 	}
 
 	count = convertbuffer(arg, &buf, errmsg);
-	if (count < 0)
+	if (count < 0) {
+		*errmsg = "convertible to a buffer";
 		return count;
+	}
 	PyBuffer_FillInfo(view, NULL, buf, count, 1, 0);
 	return 0;
 }
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index bd4f494..bdd9bd7 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -132,8 +132,8 @@
 	PyThreadState *tstate;
 	PyObject *bimod, *sysmod;
 	char *p;
-	char *icodeset; /* On Windows, input codeset may theoretically 
-			   differ from output codeset. */
+	char *icodeset = NULL; /* On Windows, input codeset may theoretically 
+			          differ from output codeset. */
 	char *codeset = NULL;
 	char *errors = NULL;
 	int free_codeset = 0;
