From: "Dr. David Alan Gilbert" <dgilb...@redhat.com> Make it return NULL rather than assert.
Signed-off-by: Dr. David Alan Gilbert <dgilb...@redhat.com> --- hw/virtio/virtio.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c index d4e4d98b59..aedd390240 100644 --- a/hw/virtio/virtio.c +++ b/hw/virtio/virtio.c @@ -1037,13 +1037,12 @@ void *qemu_get_virtqueue_element(VirtIODevice *vdev, QEMUFile *f, size_t sz) qemu_get_buffer(f, (uint8_t *)&data, sizeof(VirtQueueElementOld)); - /* TODO: teach all callers that this can fail, and return failure instead - * of asserting here. - * This is just one thing (there are probably more) that must be - * fixed before we can allow NDEBUG compilation. - */ - assert(ARRAY_SIZE(data.in_addr) >= data.in_num); - assert(ARRAY_SIZE(data.out_addr) >= data.out_num); + if (data.in_num > ARRAY_SIZE(data.in_addr) || + data.out_num > ARRAY_SIZE(data.out_addr)) { + error_report("%s: Bad index: in=%d out=%d", + __func__, data.in_num, data.out_num); + return NULL; + } elem = virtqueue_alloc_element(sz, data.out_num, data.in_num); elem->index = data.index; -- 2.17.1