1
0
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:
パチュリー・ノーレッジ 2024-07-30 17:38:51 +03:00
parent 044c7b892c
commit 9c44ce5af2
Signed by: 80486DX2-66
GPG Key ID: 83631EF27054609B

View File

@ -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;
}