diff --git a/Modules/audioop.c b/Modules/audioop.c
index 76fba98..02a30c6 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -977,7 +977,7 @@
 	char *cp, *ncp;
 	int len, size, nchannels, inrate, outrate, weightA, weightB;
 	int chan, d, *prev_i, *cur_i, cur_o;
-	PyObject *state, *samps, *str, *rv;
+	PyObject *state, *samps, *str, *rv = NULL;
 
 	weightA = 1;
 	weightB = 0;
@@ -1013,6 +1013,10 @@
 	prev_i = (int *) malloc(nchannels * sizeof(int));
 	cur_i = (int *) malloc(nchannels * sizeof(int));
 	len /= size * nchannels;	/* # of frames */
+	if (prev_i == NULL || cur_i == NULL) {
+		(void) PyErr_NoMemory();
+		goto exit;
+	}
 
 	if (state == Py_None) {
 		d = -outrate;
@@ -1022,22 +1026,22 @@
 		if (!PyArg_ParseTuple(state,
 				"iO!;audioop.ratecv: illegal state argument",
 				&d, &PyTuple_Type, &samps))
-			return NULL;
+			goto exit;
 		if (PyTuple_Size(samps) != nchannels) {
 			PyErr_SetString(AudioopError,
 					"illegal state argument");
-			return NULL;
+			goto exit;
 		}
 		for (chan = 0; chan < nchannels; chan++) {
 			if (!PyArg_ParseTuple(PyTuple_GetItem(samps, chan),
 					      "ii",&prev_i[chan],&cur_i[chan]))
-				return NULL;
+				goto exit;
 		}
 	}
 	str = PyString_FromStringAndSize(
 	      NULL, size * nchannels * (len * outrate + inrate - 1) / inrate);
 	if (str == NULL)
-		return NULL;
+		goto exit;
 	ncp = PyString_AsString(str);
 
 	for (;;) {
@@ -1050,7 +1054,7 @@
 							      prev_i[chan],
 							      cur_i[chan]));
 				if (PyErr_Occurred())
-					return NULL;
+					goto exit;
 				len = ncp - PyString_AsString(str);
 				if (len == 0) {
 					/*don't want to resize to zero length*/
@@ -1058,11 +1062,11 @@
 					Py_DECREF(str);
 					str = rv;
 				} else if (_PyString_Resize(&str, len) < 0)
-					return NULL;
+					goto exit;
 				rv = Py_BuildValue("(O(iO))", str, d, samps);
 				Py_DECREF(samps);
 				Py_DECREF(str);
-				return rv;
+				goto exit; /* return rv */
 			}
 			for (chan = 0; chan < nchannels; chan++) {
 				prev_i[chan] = cur_i[chan];
@@ -1098,6 +1102,12 @@
 			d -= inrate;
 		}
 	}
+  exit:
+	if (prev_i != NULL)
+		free(prev_i);
+	if (cur_i != NULL)
+		free(cur_i);
+	return rv;
 }
 
 static PyObject *
