From 34c0eb1facce3299fc0fd10123ba299b124fd98d Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela Date: Tue, 5 May 2009 11:39:29 +0200 Subject: [PATCH] alsaseq: reorganize GETDICTEXT and assign self->event->data.ext.ptr Signed-off-by: Jaroslav Kysela --- pyalsa/alsaseq.c | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/pyalsa/alsaseq.c b/pyalsa/alsaseq.c index 95f008d..f927820 100644 --- a/pyalsa/alsaseq.c +++ b/pyalsa/alsaseq.c @@ -337,16 +337,27 @@ self->event->data.ext.len = len; \ if (len > 0) { \ int i; \ - self->buff = malloc(len); \ for (i = 0; i < len; i++) { \ PyObject *item = PyList_GetItem(list, i); \ if (!PyInt_Check(item)) { \ PyErr_SetString(PyExc_TypeError, \ name " must be a list of integers"); \ - return NULL; \ + self->event->data.ext.len = 0; \ + return NULL; \ } \ + } \ + self->buff = malloc(len); \ + if (self->buff == NULL) { \ + PyErr_SetString(PyExc_TypeError, \ + name " no memory"); \ + self->event->data.ext.len = 0; \ + return NULL; \ + } \ + for (i = 0; i < len; i++) { \ + PyObject *item = PyList_GetItem(list, i); \ self->buff[i] = PyInt_AsLong(item); \ } \ + self->event->data.ext.ptr = self->buff; \ } \ } \ } @@ -697,7 +708,11 @@ SeqEvent_create(snd_seq_event_t *event) { memcpy(self->event, event, sizeof(snd_seq_event_t)); if (snd_seq_ev_is_variable_type(self->event)) { self->buff = malloc(self->event->data.ext.len); - memcpy(self->event->data.ext.ptr, self->buff, self->event->data.ext.len); + if (self->buff == NULL) { + PyObject_Del(self); + return PyErr_NoMemory(); + } + memcpy(self->buff, self->event->data.ext.ptr, self->event->data.ext.len); self->event->data.ext.ptr = self->buff; } else { self->buff = NULL; -- 2.47.1