# HG changeset patch # User Michael Pavone # Date 1556034472 25200 # Node ID 882746581f17d3f80300a584febf5902f7e07efc # Parent 6fc4afea54241ab64f1b06fe66ff31cc215b7f0d Make sure on-cart memories are fully initialized in all cases diff -r 6fc4afea5424 -r 882746581f17 romdb.c --- a/romdb.c Mon Apr 22 20:54:18 2019 -0700 +++ b/romdb.c Tue Apr 23 08:47:52 2019 -0700 @@ -242,7 +242,7 @@ save_size /= 2; } info->save_size = save_size; - info->save_buffer = malloc(save_size); + info->save_buffer = calloc(save_size, 1); return ram_start; } @@ -310,7 +310,7 @@ info->map[0].read_16 = nor_flash_read_w; info->map[0].read_8 = nor_flash_read_b; info->map[0].flags = MMAP_READ_CODE | MMAP_CODE; - info->map[0].buffer = info->save_buffer = malloc(info->save_size); + info->map[0].buffer = info->save_buffer = calloc(info->save_size, 1); uint32_t init_size = size < info->save_size ? size : info->save_size; memcpy(info->save_buffer, rom, init_size); byteswap_rom(info->save_size, (uint16_t *)info->save_buffer); @@ -489,8 +489,7 @@ fatal_error("SRAM size %s is invalid\n", size); } state->info->save_mask = nearest_pow2(state->info->save_size)-1; - state->info->save_buffer = malloc(state->info->save_size); - memset(state->info->save_buffer, 0, state->info->save_size); + state->info->save_buffer = calloc(state->info->save_size, 1); char *bus = tern_find_path(state->root, "SRAM\0bus\0", TVAL_PTR).ptrval; if (!strcmp(bus, "odd")) { state->info->save_type = RAM_FLAG_ODD; @@ -567,6 +566,9 @@ if (!strcmp(init, "ROM")) { uint32_t init_size = state->rom_size > state->info->save_size ? state->info->save_size : state->rom_size; memcpy(state->info->save_buffer, state->rom, init_size); + if (init_size < state->info->save_size) { + memset(state->info->save_buffer + init_size, 0xFF, state->info->save_size - init_size); + } if (state->info->save_bus == RAM_FLAG_BOTH) { byteswap_rom(state->info->save_size, (uint16_t *)state->info->save_buffer); } @@ -712,7 +714,7 @@ if (!size || size > map->end - map->start) { size = map->end - map->start; } - map->buffer = malloc(size); + map->buffer = calloc(size, 1); map->mask = calc_mask(size, start, end); map->flags = MMAP_READ | MMAP_WRITE; char *bus = tern_find_ptr_default(node, "bus", "both");