summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMika Lindqvist <postmaster@raasu.org>2021-06-09 19:15:12 +0300
committerHans Kristian Rosbach <hk-github@circlestorm.org>2021-06-11 19:53:08 +0200
commitce4409c1241a60c7ba5807530adf4a795ff87afe (patch)
tree4bf94b55fe62dca5a7c0ee36b410cf7f72cf4118
parent5cfb7f15e32bc16ec4cca82b9c094bb886456e4c (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.h3
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);