for (unsigned int i = 0; i < MAX_DIGESTS; i++) {
digest = &file->digests[i];
- if (digest->hexdigest)
+ if (digest->hexdigest) {
free(digest->hexdigest);
+ digest->hexdigest = NULL;
+ }
}
pakfire_unref(file->pakfire);
d = pakfire_file_find_digest(file, PAKFIRE_DIGEST_NONE);
// If we could not find a free spot, we probably run out of space
- if (!d || length > sizeof(d->digest)) {
+ if (!d) {
+ errno = ENOBUFS;
+ return 1;
+ }
+
+ // Check if the digest fits into our pre-allocated buffer space
+ if (length > sizeof(d->digest)) {
errno = ENOBUFS;
return 1;
}