mirror of
https://gitlab.com/80486DX2-66/gists
synced 2025-04-20 12:09:07 +05:30
reverse-ramdisk.c: fix memory safety
This commit is contained in:
parent
044c7b892c
commit
9c44ce5af2
@ -112,6 +112,7 @@ int tf_alloc(size_t n, size_t type_size) {
|
||||
FILE* file = fopen(file_path, "w+b");
|
||||
if (file == NULL) {
|
||||
#endif
|
||||
free(file_path);
|
||||
LINE_FAIL(-2);
|
||||
return -1;
|
||||
}
|
||||
@ -149,6 +150,10 @@ int tf_free(int ID) {
|
||||
DBG_PRINT("tf_free(%d)\n", ID);
|
||||
|
||||
size_t index = (size_t) ID;
|
||||
if (index >= num_temp_files) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (temp_files[index].locked) {
|
||||
errno = EBUSY;
|
||||
@ -170,6 +175,7 @@ int tf_free(int ID) {
|
||||
}
|
||||
|
||||
free(temp_files[index].file_path);
|
||||
temp_files[index].file_path = NULL;
|
||||
|
||||
// Shift the remaining temp files in the array
|
||||
for (size_t i = index; i < num_temp_files - 1; i++)
|
||||
@ -185,6 +191,9 @@ int tf_free(int ID) {
|
||||
return -1;
|
||||
}
|
||||
temp_files = new_temp_files_ptr;
|
||||
} else {
|
||||
free(temp_files);
|
||||
temp_files = NULL;
|
||||
}
|
||||
|
||||
temp_files[index].locked = false;
|
||||
@ -196,6 +205,10 @@ int tf_write(int ID, size_t offset, void* src, size_t data_size) {
|
||||
DBG_PRINT("tf_write(%d, %zu, %p, %zu)\n", ID, offset, src, data_size);
|
||||
|
||||
size_t index = (size_t) ID;
|
||||
if (index >= num_temp_files) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (temp_files[index].locked) {
|
||||
errno = EBUSY;
|
||||
@ -266,6 +279,10 @@ int tf_read(int ID, size_t offset, void* dest, size_t data_size) {
|
||||
DBG_PRINT("tf_read(%d, %zu, %p, %zu)\n", ID, offset, dest, data_size);
|
||||
|
||||
size_t index = (size_t) ID;
|
||||
if (index >= num_temp_files) {
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (temp_files[index].locked) {
|
||||
errno = EBUSY;
|
||||
@ -310,7 +327,8 @@ int tf_read(int ID, size_t offset, void* dest, size_t data_size) {
|
||||
fseek
|
||||
#endif
|
||||
(file, offset, SEEK_SET) == -1) {
|
||||
LINE_FAIL(-1);
|
||||
free(src);
|
||||
LINE_FAIL(-2);
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user