summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/debug/debugcpu.cpp
diff options
context:
space:
mode:
author Vas Crabb <vas@vastheman.com>2016-05-30 14:16:47 +1000
committer Vas Crabb <vas@vastheman.com>2016-05-30 14:17:01 +1000
commitbbb2e917b55e37642a9bef27b2676ab6b3e36fb8 (patch)
tree43156709521fc4a24a1ff22293eb30be5b026897 /src/emu/debug/debugcpu.cpp
parent2c04202451877aec427730af0836a0ff8be5b357 (diff)
MT6225 MT6226 MT6227 debugger may crash when validating expression with non-existent memory space name
Diffstat (limited to 'src/emu/debug/debugcpu.cpp')
-rw-r--r--src/emu/debug/debugcpu.cpp104
1 files changed, 52 insertions, 52 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index 394fabdbed4..ce1b3a274fc 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -1470,66 +1470,66 @@ static void expression_write_memory_region(running_machine &machine, const char
static expression_error::error_code expression_validate(void *param, const char *name, expression_space space)
{
- running_machine &machine = *(running_machine *)param;
+ running_machine &machine = *reinterpret_cast<running_machine *>(param);
device_t *device = nullptr;
switch (space)
{
- case EXPSPACE_PROGRAM_LOGICAL:
- case EXPSPACE_DATA_LOGICAL:
- case EXPSPACE_IO_LOGICAL:
- case EXPSPACE_SPACE3_LOGICAL:
- if (name != nullptr)
- {
- device = expression_get_device(machine, name);
- if (device == nullptr)
- return expression_error::INVALID_MEMORY_NAME;
- }
- if (device == nullptr)
- device = debug_cpu_get_visible_cpu(machine);
- if (!device->memory().has_space(AS_PROGRAM + (space - EXPSPACE_PROGRAM_LOGICAL)))
- return expression_error::NO_SUCH_MEMORY_SPACE;
- break;
-
- case EXPSPACE_PROGRAM_PHYSICAL:
- case EXPSPACE_DATA_PHYSICAL:
- case EXPSPACE_IO_PHYSICAL:
- case EXPSPACE_SPACE3_PHYSICAL:
- if (name != nullptr)
- {
- device = expression_get_device(machine, name);
- if (device == nullptr)
- return expression_error::INVALID_MEMORY_NAME;
- }
- if (device == nullptr)
- device = debug_cpu_get_visible_cpu(machine);
- if (!device->memory().has_space(AS_PROGRAM + (space - EXPSPACE_PROGRAM_PHYSICAL)))
- return expression_error::NO_SUCH_MEMORY_SPACE;
- break;
-
- case EXPSPACE_OPCODE:
- case EXPSPACE_RAMWRITE:
- if (name != nullptr)
- {
- device = expression_get_device(machine, name);
- if (device == nullptr)
- return expression_error::INVALID_MEMORY_NAME;
- }
- if (device == nullptr)
- device = debug_cpu_get_visible_cpu(machine);
- if (!device->memory().has_space(AS_PROGRAM))
- return expression_error::NO_SUCH_MEMORY_SPACE;
- break;
+ case EXPSPACE_PROGRAM_LOGICAL:
+ case EXPSPACE_DATA_LOGICAL:
+ case EXPSPACE_IO_LOGICAL:
+ case EXPSPACE_SPACE3_LOGICAL:
+ if (name)
+ {
+ device = expression_get_device(machine, name);
+ if (!device)
+ return expression_error::INVALID_MEMORY_NAME;
+ }
+ if (!device)
+ device = debug_cpu_get_visible_cpu(machine);
+ if (!device->memory().has_space(AS_PROGRAM + (space - EXPSPACE_PROGRAM_LOGICAL)))
+ return expression_error::NO_SUCH_MEMORY_SPACE;
+ break;
- case EXPSPACE_REGION:
- if (name == nullptr)
- return expression_error::MISSING_MEMORY_NAME;
- if (machine.root_device().memregion(name)->base() == nullptr)
+ case EXPSPACE_PROGRAM_PHYSICAL:
+ case EXPSPACE_DATA_PHYSICAL:
+ case EXPSPACE_IO_PHYSICAL:
+ case EXPSPACE_SPACE3_PHYSICAL:
+ if (name)
+ {
+ device = expression_get_device(machine, name);
+ if (!device)
return expression_error::INVALID_MEMORY_NAME;
- break;
+ }
+ if (!device)
+ device = debug_cpu_get_visible_cpu(machine);
+ if (!device->memory().has_space(AS_PROGRAM + (space - EXPSPACE_PROGRAM_PHYSICAL)))
+ return expression_error::NO_SUCH_MEMORY_SPACE;
+ break;
- default:
+ case EXPSPACE_OPCODE:
+ case EXPSPACE_RAMWRITE:
+ if (name)
+ {
+ device = expression_get_device(machine, name);
+ if (!device)
+ return expression_error::INVALID_MEMORY_NAME;
+ }
+ if (!device)
+ device = debug_cpu_get_visible_cpu(machine);
+ if (!device->memory().has_space(AS_PROGRAM))
return expression_error::NO_SUCH_MEMORY_SPACE;
+ break;
+
+ case EXPSPACE_REGION:
+ if (!name)
+ return expression_error::MISSING_MEMORY_NAME;
+ if (!machine.root_device().memregion(name) || !machine.root_device().memregion(name)->base())
+ return expression_error::INVALID_MEMORY_NAME;
+ break;
+
+ default:
+ return expression_error::NO_SUCH_MEMORY_SPACE;
}
return expression_error::NONE;
}