From c2621cc4f8a3291ed8cc1e25901a4dd54473b8f1 Mon Sep 17 00:00:00 2001 From: Xavier Arteaga Date: Fri, 30 Oct 2020 10:17:05 +0100 Subject: [PATCH] Protect ring-buffer write from nullptr --- lib/src/phy/utils/ringbuffer.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/lib/src/phy/utils/ringbuffer.c b/lib/src/phy/utils/ringbuffer.c index 6e8ec7de0..d5ef6dec5 100644 --- a/lib/src/phy/utils/ringbuffer.c +++ b/lib/src/phy/utils/ringbuffer.c @@ -147,12 +147,22 @@ int srslte_ringbuffer_write_timed_block(srslte_ringbuffer_t* q, void* p, int nof } else if (!q->active) { ret = SRSLTE_SUCCESS; } else if (ret == SRSLTE_SUCCESS) { - if (w_bytes > q->capacity - q->wpm) { - int x = q->capacity - q->wpm; - memcpy(&q->buffer[q->wpm], ptr, x); - memcpy(q->buffer, &ptr[x], w_bytes - x); + if (ptr != NULL) { + if (w_bytes > q->capacity - q->wpm) { + int x = q->capacity - q->wpm; + memcpy(&q->buffer[q->wpm], ptr, x); + memcpy(q->buffer, &ptr[x], w_bytes - x); + } else { + memcpy(&q->buffer[q->wpm], ptr, w_bytes); + } } else { - memcpy(&q->buffer[q->wpm], ptr, w_bytes); + if (w_bytes > q->capacity - q->wpm) { + int x = q->capacity - q->wpm; + memset(&q->buffer[q->wpm], 0, x); + memset(q->buffer, 0, w_bytes - x); + } else { + memset(&q->buffer[q->wpm], 0, w_bytes); + } } q->wpm += w_bytes; if (q->wpm >= q->capacity) {