diff options
author | xypron.glpk@gmx.de | 2017-05-03 23:20:10 +0200 |
---|---|---|
committer | Tom Rini | 2017-05-05 16:45:57 -0400 |
commit | 05d887b4619e54a2b7d487ac1c31b4544ce58533 (patch) | |
tree | a7096fcd96ac176998753945e9fd73ac93ae9be3 | |
parent | 1275a44e2f0579aba11d59c92c1717d5f9abc5e9 (diff) |
lib: circbuf: avoid possible null pointer dereference
We should not first dereference p and afterwards assert that is
was not NULL. Instead do the assert first.
The problem was indicated by cppcheck.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
-rw-r--r-- | lib/circbuf.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/lib/circbuf.c b/lib/circbuf.c index 9848da3b7b6..6ed05164304 100644 --- a/lib/circbuf.c +++ b/lib/circbuf.c @@ -41,11 +41,13 @@ int buf_free (circbuf_t * buf) int buf_pop (circbuf_t * buf, char *dest, unsigned int len) { unsigned int i; - char *p = buf->top; + char *p; assert (buf != NULL); assert (dest != NULL); + p = buf->top; + /* Cap to number of bytes in buffer */ if (len > buf->size) len = buf->size; @@ -69,11 +71,13 @@ int buf_push (circbuf_t * buf, const char *src, unsigned int len) { /* NOTE: this function allows push to overwrite old data. */ unsigned int i; - char *p = buf->tail; + char *p; assert (buf != NULL); assert (src != NULL); + p = buf->tail; + for (i = 0; i < len; i++) { *p++ = src[i]; if (p == buf->end) { |