if (dist >= len || dist >= INFFAST_CHUNKSIZE)
out = chunkcopy(out, out - dist, len);
else
- out = chunkmemset(out, dist, len);
+ out = chunkmemsetsafe(out, dist, len, len);
#else
if (len < sizeof(uint64_t))
out = set_bytes(out, out - dist, dist, len);
}
static inline unsigned char* chunkmemsetsafe(unsigned char *out, unsigned dist, unsigned len, unsigned left) {
- if (left < (unsigned)(3 * INFFAST_CHUNKSIZE)) {
+ if (len < sizeof(uint64_t) || left < (unsigned)(3 * INFFAST_CHUNKSIZE)) {
while (len > 0) {
*out = *(out - dist);
out++;