mirror of
https://codeberg.org/Limine/Limine
synced 2026-01-26 13:14:28 +00:00
host: Fix memory leaks in error paths
This commit is contained in:
parent
403b4d57bf
commit
2bb2fd33e7
@ -390,6 +390,7 @@ static bool load_uninstall_data(const char *filename) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
size_t loaded_count = 0;
|
||||
for (size_t i = 0; i < uninstall_data_i; i++) {
|
||||
if (fread(&uninstall_data[i].loc, sizeof(uint64_t), 1, udfile) != 1) {
|
||||
goto fread_error;
|
||||
@ -403,8 +404,10 @@ static bool load_uninstall_data(const char *filename) {
|
||||
goto error;
|
||||
}
|
||||
if (fread(uninstall_data[i].data, uninstall_data[i].count, 1, udfile) != 1) {
|
||||
free(uninstall_data[i].data);
|
||||
goto fread_error;
|
||||
}
|
||||
loaded_count++;
|
||||
}
|
||||
|
||||
fclose(udfile);
|
||||
@ -414,6 +417,10 @@ fread_error:
|
||||
perror_wrap("error: load_uninstall_data(): fread()");
|
||||
|
||||
error:
|
||||
// Free any previously allocated uninstall data
|
||||
for (size_t j = 0; j < loaded_count; j++) {
|
||||
free(uninstall_data[j].data);
|
||||
}
|
||||
if (udfile != NULL) {
|
||||
fclose(udfile);
|
||||
}
|
||||
@ -461,6 +468,7 @@ static bool _device_write(const void *_buffer, uint64_t loc, size_t count) {
|
||||
}
|
||||
|
||||
if (!_device_read(ud->data, loc, count)) {
|
||||
free(ud->data);
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -474,6 +482,9 @@ skip_save:;
|
||||
uint64_t block = (loc + progress) / block_size;
|
||||
|
||||
if (!device_cache_block(block)) {
|
||||
if (!uninstalling) {
|
||||
free(ud->data);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user