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