All: Declare sim_stop_messages as an array SCPE_BASE long
This avoids a potential invalid pointer dereference when formatting the return value from sim_instr() if it is < SCPE_BASE but greater than the previously defined static array size.sizeof Update simh.doc to reflect this generic change.
This commit is contained in:
parent
782fe167ca
commit
ae825c9afb
46 changed files with 46 additions and 45 deletions
|
@ -60,7 +60,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Reserved Instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -63,7 +63,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O Instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -145,7 +145,7 @@ DEVICE *sim_devices[] = {
|
|||
|
||||
static char memoryAccessMessage[256];
|
||||
static char instructionMessage[256];
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
memoryAccessMessage,
|
||||
|
|
|
@ -76,7 +76,7 @@ DEVICE *sim_devices[] = {
|
|||
};
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
0,
|
||||
};
|
||||
|
||||
|
|
|
@ -284,7 +284,7 @@ DEVICE *sim_devices[] = {
|
|||
0
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Неизвестная ошибка", /* Unknown error */
|
||||
"Останов", /* STOP */
|
||||
"Точка останова", /* Emulator breakpoint */
|
||||
|
|
|
@ -85,7 +85,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"OK",
|
||||
"Indirect addressing loop count exceeded",
|
||||
"Selective Stop",
|
||||
|
|
|
@ -67,7 +67,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unimplemented unit",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -88,7 +88,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unimplemented instruction",
|
||||
"Unimplemented I/O device",
|
||||
|
|
|
@ -1968,7 +1968,7 @@ DEVICE *sim_devices [] = { /* an array of pointers to the s
|
|||
#define DEVICE_COUNT (sizeof sim_devices / sizeof sim_devices [0] - 1) /* the count excludes the NULL pointer */
|
||||
|
||||
|
||||
const char *sim_stop_messages [] = { /* an array of pointers to the stop messages in STOP_nnn order */
|
||||
const char *sim_stop_messages [SCPE_BASE] = { /* an array of pointers to the stop messages in STOP_nnn order */
|
||||
"Impossible error", /* 0 (never returned) */
|
||||
"Unimplemented instruction", /* STOP_UNIMPL */
|
||||
"Unassigned select code", /* STOP_UNSC */
|
||||
|
|
|
@ -1099,7 +1099,7 @@ DEVICE *sim_devices [] = { /* an array of pointers to the s
|
|||
#define DEVICE_COUNT (sizeof sim_devices / sizeof sim_devices [0] - 1)
|
||||
|
||||
|
||||
const char *sim_stop_messages [] = { /* an array of pointers to the stop messages in STOP_nnn order */
|
||||
const char *sim_stop_messages [SCPE_BASE] = { /* an array of pointers to the stop messages in STOP_nnn order */
|
||||
"Impossible error", /* 0 (never returned) */
|
||||
"System halt", /* STOP_SYSHALT */
|
||||
"Unimplemented instruction", /* STOP_UNIMPL */
|
||||
|
|
|
@ -84,7 +84,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unimplemented instruction",
|
||||
"Non-existent memory",
|
||||
|
|
|
@ -70,7 +70,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -58,7 +58,7 @@ DIB mt_dib = { 5, &mt_cmd, &mt_ini };
|
|||
DIB dsk_dib = { 4, &mt_cmd, &dsk_ini };
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -115,7 +115,7 @@ DIB com_dib = { CH_TYP_79XX|CH_TYP_UREC, 0, 04200, 07700, &com_cmd, NULL };
|
|||
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"IO device not ready",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -82,7 +82,7 @@ DIB mt_dib = { CH_TYP_PIO, NUM_UNITS_MT, 0400, 07770, &mt_cmd, &mt_ini };
|
|||
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"IO device not ready",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -116,7 +116,7 @@ DIB com_dib = { CH_TYP_79XX, 0, 0, 0, &com_cmd, NULL };
|
|||
#endif
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"IO device not ready",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -130,7 +130,7 @@ DIB com_dib = { CH_TYP_79XX, 0, 0, 0, &com_cmd, NULL };
|
|||
#endif
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"IO device not ready",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -143,7 +143,7 @@ DIB hsdrm_dib = { CH_TYP_SPEC, 1, 0330, 0777, &hsdrm_cmd, &hsdrm_ini };
|
|||
|
||||
|
||||
/* Simulator stop codes */
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"IO device not ready",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -95,7 +95,7 @@ DEVICE *sim_devices[] = {
|
|||
|
||||
char ch_bkpt_msg[] = "Channel A breakpoint, CLC: xxxxxx";
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -71,7 +71,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Wait",
|
||||
"Invalid command",
|
||||
|
|
|
@ -85,7 +85,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O Instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -85,7 +85,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O Instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -86,7 +86,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Reserved instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -90,7 +90,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Reserved instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -66,7 +66,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"STOP",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -125,7 +125,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -103,7 +103,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Undefined instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -215,7 +215,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -104,7 +104,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -218,7 +218,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Red stack trap",
|
||||
"Odd address trap",
|
||||
|
|
|
@ -194,7 +194,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Undefined instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -115,7 +115,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unimplemented instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -69,7 +69,7 @@ DEVICE *sim_devices[] = {
|
|||
&tim_dev,
|
||||
NULL
|
||||
};
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"---",
|
||||
"PC Breakpoint",
|
||||
"MEM Breakpoint",
|
||||
|
|
|
@ -79,7 +79,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O Instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -272,7 +272,7 @@ t_stat sim_load(FILE* fptr, CONST char* cptr, CONST char* fnam, t_bool flag)
|
|||
return SCPE_OK;
|
||||
}
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"---",
|
||||
"PC Breakpoint",
|
||||
"MEM Breakpoint",
|
||||
|
|
|
@ -83,7 +83,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"IO device not ready",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -64,7 +64,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Stop",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -90,7 +90,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Undefined instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -86,7 +86,7 @@ REG *sim_PC = &cpu_reg[0];
|
|||
|
||||
int32 sim_emax = 60;
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -53,7 +53,7 @@ REG *sim_PC = &cpu_reg[0];
|
|||
|
||||
int32 sim_emax = 1;
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
BIN
doc/simh.doc
BIN
doc/simh.doc
Binary file not shown.
|
@ -53,7 +53,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"HALT instruction",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -96,7 +96,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Invalid I/O configuration",
|
||||
"Breakpoint",
|
||||
|
|
|
@ -93,7 +93,8 @@
|
|||
sim_devices[] array of pointers to simulated devices
|
||||
sim_PC pointer to saved PC register descriptor
|
||||
sim_interval simulator interval to next event
|
||||
sim_stop_messages[] array of pointers to stop messages
|
||||
sim_stop_messages[SCPE_BASE]
|
||||
array of pointers to stop messages
|
||||
sim_instr() instruction execution routine
|
||||
sim_load() binary loader routine
|
||||
sim_emax maximum number of words in an instruction
|
||||
|
|
|
@ -75,7 +75,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O Instruction",
|
||||
"HALT instruction",
|
||||
|
|
|
@ -73,7 +73,7 @@ DEVICE *sim_devices[] = {
|
|||
NULL
|
||||
};
|
||||
|
||||
const char *sim_stop_messages[] = {
|
||||
const char *sim_stop_messages[SCPE_BASE] = {
|
||||
"Unknown error",
|
||||
"Unknown I/O Instruction",
|
||||
"HALT instruction",
|
||||
|
|
Loading…
Add table
Reference in a new issue