comparison romdb.c @ 825:e6f2c9dbf6c8

Prevent crashes if game tries to access the ROM area outside of the size of the actual ROM
author Michael Pavone <pavone@retrodev.com>
date Tue, 04 Aug 2015 21:43:20 -0700
parents 724bbec47f86
children 46bb673eed4e
comparison
equal deleted inserted replaced
824:3b8267fd1687 825:e6f2c9dbf6c8
491 info->map = malloc(sizeof(memmap_chunk) * info->map_chunks); 491 info->map = malloc(sizeof(memmap_chunk) * info->map_chunks);
492 memset(info->map, 0, sizeof(memmap_chunk)*2); 492 memset(info->map, 0, sizeof(memmap_chunk)*2);
493 memcpy(info->map+2, base_map, sizeof(memmap_chunk) * base_chunks); 493 memcpy(info->map+2, base_map, sizeof(memmap_chunk) * base_chunks);
494 494
495 if (ram_start >= rom_end) { 495 if (ram_start >= rom_end) {
496 info->map[0].end = rom_end > 0x400000 ? rom_end : 0x400000; 496 info->map[0].end = rom_end < 0x400000 ? nearest_pow2(rom_end) - 1 : 0xFFFFFF;
497 //TODO: ROM mirroring 497 //TODO: ROM mirroring
498 info->map[0].mask = 0xFFFFFF; 498 info->map[0].mask = 0xFFFFFF;
499 info->map[0].flags = MMAP_READ; 499 info->map[0].flags = MMAP_READ;
500 info->map[0].buffer = rom; 500 info->map[0].buffer = rom;
501 501
540 info->map_chunks = base_chunks + 1; 540 info->map_chunks = base_chunks + 1;
541 info->map = malloc(sizeof(memmap_chunk) * info->map_chunks); 541 info->map = malloc(sizeof(memmap_chunk) * info->map_chunks);
542 memset(info->map, 0, sizeof(memmap_chunk)); 542 memset(info->map, 0, sizeof(memmap_chunk));
543 memcpy(info->map+1, base_map, sizeof(memmap_chunk) * base_chunks); 543 memcpy(info->map+1, base_map, sizeof(memmap_chunk) * base_chunks);
544 544
545 info->map[0].end =rom_end > 0x400000 ? rom_end : 0x400000; 545 info->map[0].end = rom_end > 0x400000 ? rom_end : 0x400000;
546 info->map[0].mask = 0xFFFFFF; 546 info->map[0].mask = rom_end < 0x400000 ? nearest_pow2(rom_end) - 1 : 0xFFFFFF;
547 info->map[0].flags = MMAP_READ; 547 info->map[0].flags = MMAP_READ;
548 info->map[0].buffer = rom; 548 info->map[0].buffer = rom;
549 info->save_type = SAVE_NONE; 549 info->save_type = SAVE_NONE;
550 } 550 }
551 } 551 }