diff options
author | Mika Lindqvist <postmaster@raasu.org> | 2021-06-09 19:15:12 +0300 |
---|---|---|
committer | Hans Kristian Rosbach <hk-github@circlestorm.org> | 2021-06-11 19:53:08 +0200 |
commit | ce4409c1241a60c7ba5807530adf4a795ff87afe (patch) | |
tree | 4bf94b55fe62dca5a7c0ee36b410cf7f72cf4118 | |
parent | 5cfb7f15e32bc16ec4cca82b9c094bb886456e4c (diff) |
[CHUNKCOPY_SAFE] Fix off-by-one error
* When chunk size was more than 8 bytes, the comparison logic failed if safe length was one less than chunk size.
-rw-r--r-- | chunkset_tpl.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/chunkset_tpl.h b/chunkset_tpl.h index 9e8ede5..68b7ded 100644 --- a/chunkset_tpl.h +++ b/chunkset_tpl.h @@ -37,7 +37,8 @@ Z_INTERNAL uint8_t* CHUNKCOPY(uint8_t *out, uint8_t const *from, unsigned len) { /* Behave like chunkcopy, but avoid writing beyond of legal output. */ Z_INTERNAL uint8_t* CHUNKCOPY_SAFE(uint8_t *out, uint8_t const *from, unsigned len, uint8_t *safe) { - if ((safe - out) < (ptrdiff_t)sizeof(chunk_t)) { + len = MIN(len, safe - out + 1); + if (len < sizeof(chunk_t)) { int32_t use_chunk16 = sizeof(chunk_t) > 16 && (len & 16); if (use_chunk16) { memcpy(out, from, 16); |