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:
Mark Pizzolato 2020-09-02 15:56:07 -07:00
parent 782fe167ca
commit ae825c9afb
46 changed files with 46 additions and 45 deletions

View file

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

View file

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

View file

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

View file

@ -76,7 +76,7 @@ DEVICE *sim_devices[] = {
};
/* Simulator stop codes */
const char *sim_stop_messages[] = {
const char *sim_stop_messages[SCPE_BASE] = {
0,
};

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -66,7 +66,7 @@ DEVICE *sim_devices[] = {
NULL
};
const char *sim_stop_messages[] = {
const char *sim_stop_messages[SCPE_BASE] = {
"Unknown error",
"STOP",
"Breakpoint",

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -64,7 +64,7 @@ DEVICE *sim_devices[] = {
NULL
};
const char *sim_stop_messages[] = {
const char *sim_stop_messages[SCPE_BASE] = {
"Unknown error",
"Stop",
"Breakpoint",

View file

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

View file

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

View file

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

Binary file not shown.

View file

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

View file

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

View file

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

View file

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

View file

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