SCP: Avoid a Coverity complaint about getenv()

This commit is contained in:
Mark Pizzolato 2022-03-08 00:02:07 -08:00
parent 6c56968f15
commit 857f725470

14
scp.c
View file

@ -2791,18 +2791,22 @@ sim_tape_init (); /* init tape package */
for (i = 0; cmd_table[i].name; i++) { for (i = 0; cmd_table[i].name; i++) {
size_t alias_len = strlen (cmd_table[i].name); size_t alias_len = strlen (cmd_table[i].name);
char *cmd_name = (char *)calloc (1 + alias_len, sizeof (*cmd_name)); char *cmd_name = (char *)calloc (1 + alias_len, sizeof (*cmd_name));
char *env_cmd_val;
size_t env_cmd_val_len;
strcpy (cmd_name, cmd_table[i].name); strcpy (cmd_name, cmd_table[i].name);
while (alias_len > 1) { while (alias_len > 1) {
cmd_name[alias_len] = '\0'; /* Possible short form command name */ cmd_name[alias_len] = '\0'; /* Possible short form command name */
--alias_len; --alias_len;
if (getenv (cmd_name)) { /* Externally defined command alias? */ env_cmd_val = getenv (cmd_name);
if (env_cmd_val) { /* Externally defined command alias? */
env_cmd_val_len = strlen (env_cmd_val);
++sim_external_env_count; ++sim_external_env_count;
sim_external_env = (struct deleted_env_var *)realloc (sim_external_env, sim_external_env_count * sizeof (*sim_external_env)); sim_external_env = (struct deleted_env_var *)realloc (sim_external_env, sim_external_env_count * sizeof (*sim_external_env));
sim_external_env[sim_external_env_count - 1].name = (char *)malloc (1 + strlen (cmd_name)); sim_external_env[sim_external_env_count - 1].name = (char *)malloc (1 + strlen (cmd_name));
strcpy (sim_external_env[sim_external_env_count - 1].name, cmd_name); strcpy (sim_external_env[sim_external_env_count - 1].name, cmd_name);
sim_external_env[sim_external_env_count - 1].value = (char *)malloc (1 + strlen (getenv (cmd_name))); sim_external_env[sim_external_env_count - 1].value = (char *)malloc (1 + env_cmd_val_len);
strcpy (sim_external_env[sim_external_env_count - 1].value, getenv (cmd_name)); strlcpy (sim_external_env[sim_external_env_count - 1].value, env_cmd_val, 1 + env_cmd_val_len);
unsetenv (cmd_name); /* Remove it to protect against possibly malicious aliases */ unsetenv (cmd_name); /* Remove it to protect against possibly malicious aliases */
} }
} }
@ -2907,9 +2911,9 @@ if (cptr == NULL) {
else else
cptr2 = NULL; cptr2 = NULL;
docmdp = find_cmd ("DO"); docmdp = find_cmd ("DO");
if (cptr && (sizeof (nbuf) > strlen (cptr) + strlen ("/simh.ini") + 3)) { if (docmdp && cptr && (sizeof (nbuf) > strlen (cptr) + strlen ("/simh.ini") + 3)) {
snprintf(nbuf, sizeof (nbuf), "\"%s%s%ssimh.ini\"", cptr2 ? cptr2 : "", cptr, strchr (cptr, '/') ? "/" : "\\"); snprintf(nbuf, sizeof (nbuf), "\"%s%s%ssimh.ini\"", cptr2 ? cptr2 : "", cptr, strchr (cptr, '/') ? "/" : "\\");
stat = docmdp->action (-1, nbuf) & ~SCPE_NOMESSAGE; /* simh.ini proc cmd file */ stat = docmdp->action (-1, nbuf); /* simh.ini proc cmd file */
} }
if (SCPE_BARE_STATUS(stat) == SCPE_OPENERR) if (SCPE_BARE_STATUS(stat) == SCPE_OPENERR)
stat = docmdp->action (-1, "simh.ini"); /* simh.ini proc cmd file */ stat = docmdp->action (-1, "simh.ini"); /* simh.ini proc cmd file */