This is an automated email from the ASF dual-hosted git repository. xiaoxiang pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push: new 6427187 mm/circbuf: fix the problem of dividing by zero. 6427187 is described below commit 642718709df59b81f7c21c0cf780bc97c1f8217b Author: dongjiuzhu <dongjiuz...@xiaomi.com> AuthorDate: Mon Nov 30 16:24:41 2020 +0800 mm/circbuf: fix the problem of dividing by zero. N/A Change-Id: I78a5cae0f782bc2c09848ebda9589dc53809e089 Signed-off-by: dongjiuzhu <dongjiuz...@xiaomi.com> --- mm/circbuf/circbuf.c | 44 +++++++++++++++++++++++++++++++------------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/mm/circbuf/circbuf.c b/mm/circbuf/circbuf.c index cef8e13..0912e52 100644 --- a/mm/circbuf/circbuf.c +++ b/mm/circbuf/circbuf.c @@ -102,26 +102,29 @@ int circbuf_init(FAR struct circbuf_s *circ, FAR void *base, size_t bytes) int circbuf_resize(FAR struct circbuf_s *circ, size_t bytes) { - FAR void *tmp; - size_t len; + FAR void *tmp = NULL; + size_t len = 0; DEBUGASSERT(circ); DEBUGASSERT(!circ->external); - tmp = kmm_malloc(bytes); - if (!tmp) + if (bytes) { - return -ENOMEM; - } + tmp = kmm_malloc(bytes); + if (!tmp) + { + return -ENOMEM; + } - len = circbuf_used(circ); - if (bytes < len) - { - circbuf_skip(circ, len - bytes); - len = bytes; - } + len = circbuf_used(circ); + if (bytes < len) + { + circbuf_skip(circ, len - bytes); + len = bytes; + } - circbuf_read(circ, tmp, len); + circbuf_read(circ, tmp, len); + } kmm_free(circ->base); @@ -276,6 +279,11 @@ ssize_t circbuf_peek(FAR struct circbuf_s *circ, DEBUGASSERT(circ); + if (!circ->size) + { + return 0; + } + len = circbuf_used(circ); off = circ->tail % circ->size; @@ -394,6 +402,11 @@ ssize_t circbuf_write(FAR struct circbuf_s *circ, DEBUGASSERT(circ); DEBUGASSERT(src || !bytes); + if (!circ->size) + { + return 0; + } + space = circbuf_space(circ); off = circ->head % circ->size; if (bytes > space) @@ -446,6 +459,11 @@ ssize_t circbuf_overwrite(FAR struct circbuf_s *circ, DEBUGASSERT(circ); DEBUGASSERT(src || !bytes); + if (!circ->size) + { + return 0; + } + if (bytes > circ->size) { src += bytes - circ->size;