Mercurial > dropbear
diff circbuffer.c @ 1173:d734fe76b72f coverity
merge
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 23 Nov 2015 23:04:48 +0800 |
parents | 1397a677cb5c |
children | 06d52bcb8094 |
line wrap: on
line diff
--- a/circbuffer.c Fri Aug 07 21:26:03 2015 +0800 +++ b/circbuffer.c Mon Nov 23 23:04:48 2015 +0800 @@ -37,9 +37,8 @@ } cbuf = (circbuffer*)m_malloc(sizeof(circbuffer)); - if (size > 0) { - cbuf->data = (unsigned char*)m_malloc(size); - } + /* data is malloced on first write */ + cbuf->data = NULL; cbuf->used = 0; cbuf->readpos = 0; cbuf->writepos = 0; @@ -50,8 +49,10 @@ void cbuf_free(circbuffer * cbuf) { - m_burn(cbuf->data, cbuf->size); - m_free(cbuf->data); + if (cbuf->data) { + m_burn(cbuf->data, cbuf->size); + m_free(cbuf->data); + } m_free(cbuf); } @@ -106,6 +107,11 @@ dropbear_exit("Bad cbuf write"); } + if (!cbuf->data) { + /* lazy allocation */ + cbuf->data = (unsigned char*)m_malloc(cbuf->size); + } + return &cbuf->data[cbuf->writepos]; }