]> git.ipfire.org Git - thirdparty/zlib-ng.git/commitdiff
[CHUNKCOPY_SAFE] Fix off-by-one error
authorMika Lindqvist <postmaster@raasu.org>
Wed, 9 Jun 2021 16:15:12 +0000 (19:15 +0300)
committerHans Kristian Rosbach <hk-github@circlestorm.org>
Fri, 11 Jun 2021 17:53:08 +0000 (19:53 +0200)
* When chunk size was more than 8 bytes, the comparison logic failed if safe length was one less than chunk size.

chunkset_tpl.h

index 9e8ede5591c7f6623b91cf8ebd619cef39330348..68b7dedeeefe177f34eec23137f8abfc2e57feeb 100644 (file)
@@ -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);