If too many versions of log / dnstap files to be saved where requests
the memory after to_keep could be overwritten. Force the number of
versions to be saved to a save level. Additionally the memmove length
was incorrect.
(cherry picked from commit
6ca78bc57dece45029ee56a73161db7b68140286)
}
if (versions > 0) {
+ if (versions > ISC_LOG_MAX_VERSIONS) {
+ versions = ISC_LOG_MAX_VERSIONS;
+ }
/*
* First we fill 'to_keep' structure using insertion sort
*/
- memset(to_keep, 0, versions * sizeof(long long));
+ memset(to_keep, 0, sizeof(to_keep));
while (isc_dir_read(&dir) == ISC_R_SUCCESS) {
if (dir.entry.length > bnamelen &&
strncmp(dir.entry.name, bname, bnamelen) == 0 &&
if (i < versions) {
memmove(&to_keep[i + 1],
&to_keep[i],
- sizeof(long long) *
- versions -
- i - 1);
+ sizeof(to_keep[0]) *
+ (versions - i - 1));
to_keep[i] = version;
}
}