diff options
author | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2011-11-23 08:21:51 +0100 |
---|---|---|
committer | Alexander Wenzel <Alexander.AW.Wenzel@bmw.de> | 2011-11-23 08:21:51 +0100 |
commit | c35685d34d5c87c03d2be100989a829268d6d946 (patch) | |
tree | dad84fe3e653b5d94b497359cedd72921eb8ae67 /src/shared/dlt_common.c | |
parent | acb5ebc5a8a9cdf6ee0bdd47d544be7238a3e0f6 (diff) | |
download | DLT-daemon-c35685d34d5c87c03d2be100989a829268d6d946.tar.gz |
Fixed buffer overflow problem in buffer library.
Diffstat (limited to 'src/shared/dlt_common.c')
-rwxr-xr-x | src/shared/dlt_common.c | 5 |
1 files changed, 4 insertions, 1 deletions
diff --git a/src/shared/dlt_common.c b/src/shared/dlt_common.c index 8e2b6d4..1ebc696 100755 --- a/src/shared/dlt_common.c +++ b/src/shared/dlt_common.c @@ -2547,7 +2547,7 @@ int dlt_buffer_push(DltBuffer *buf,const unsigned char *data,unsigned int size) int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size1,const unsigned char *data2,unsigned int size2,const unsigned char *data3,unsigned int size3) { int free_size; - int write, read; + int write, read, count; DltBufferBlockHead head; if(!buf->mem) { @@ -2559,6 +2559,7 @@ int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size // get current write pointer write = ((int*)(buf->shm))[0]; read = ((int*)(buf->shm))[1]; + count = ((int*)(buf->shm))[2]; // check pointers if((read>buf->size) || (write>buf->size)) @@ -2571,6 +2572,8 @@ int dlt_buffer_push3(DltBuffer *buf,const unsigned char *data1,unsigned int size // calculate free size if(read>write) free_size = read - write; + else if(count && (write == read)) + free_size = 0; else free_size = buf->size - write + read; |