Skip to content

Commit 998ca66

Browse files
committed
rg_storage: memset 0 unused buffer space in rg_storage_read_file
This should avoid some problems, especially in regards to text content.
1 parent c1ed05a commit 998ca66

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

components/retro-go/rg_storage.c

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,7 +417,7 @@ bool rg_storage_read_file(const char *path, void **data_out, size_t *data_len, u
417417
RG_ASSERT_ARG(data_out && data_len);
418418
CHECK_PATH(path);
419419

420-
size_t output_buffer_align = RG_MAX(0x400, (flags & 0xF) * 0x2000);
420+
size_t output_buffer_alloc_size;
421421
size_t output_buffer_size;
422422
void *output_buffer;
423423
size_t file_size;
@@ -435,13 +435,16 @@ bool rg_storage_read_file(const char *path, void **data_out, size_t *data_len, u
435435

436436
if (flags & RG_FILE_USER_BUFFER)
437437
{
438+
output_buffer_alloc_size = *data_len;
438439
output_buffer_size = RG_MIN(*data_len, file_size);
439440
output_buffer = *data_out;
440441
}
441442
else
442443
{
444+
size_t blocksize = RG_MAX(0x400, (flags & 0xF) * 0x2000);
445+
output_buffer_alloc_size = (file_size + (blocksize - 1)) & ~(blocksize - 1);
443446
output_buffer_size = file_size;
444-
output_buffer = malloc((output_buffer_size + (output_buffer_align - 1)) & ~(output_buffer_align - 1));
447+
output_buffer = malloc(output_buffer_alloc_size);
445448
}
446449

447450
if (!output_buffer)
@@ -462,6 +465,12 @@ bool rg_storage_read_file(const char *path, void **data_out, size_t *data_len, u
462465

463466
fclose(fp);
464467

468+
// Wipe the extra allocated space, if any
469+
if (output_buffer_alloc_size > output_buffer_size)
470+
{
471+
memset(output_buffer + output_buffer_size, 0, output_buffer_alloc_size - output_buffer_size);
472+
}
473+
465474
*data_out = output_buffer;
466475
*data_len = output_buffer_size;
467476
return true;

0 commit comments

Comments
 (0)