Fix #51: Only return valid part of the buffer in the read function

This commit is contained in:
Ronald van Elburg
2020-09-30 15:11:10 +02:00
parent 0ae60f80f3
commit 1e3c7f3fd0

View File

@@ -1051,6 +1051,7 @@ alsapcm_read(alsapcm_t *self, PyObject *args)
{
int res;
int size = self->framesize * self->periodsize;
int sizeout;
PyObject *buffer_obj, *tuple_obj, *res_obj;
char *buffer;
@@ -1106,16 +1107,20 @@ alsapcm_read(alsapcm_t *self, PyObject *args)
}
if (res <= 0) {
sizeout = 0;
} else {
sizeout = res * self->framesize;
}
#if PY_MAJOR_VERSION < 3
/* If the following fails, it will free the object */
if (_PyString_Resize(&buffer_obj, 0))
if (_PyString_Resize(&buffer_obj, sizeout))
return NULL;
#else
/* If the following fails, it will free the object */
if (_PyBytes_Resize(&buffer_obj, 0))
if (_PyBytes_Resize(&buffer_obj, sizeout))
return NULL;
#endif
}
res_obj = PyLong_FromLong(res);
if (!res_obj) {