SCP: Avoid a Coverity complaint about getenv()
This commit is contained in:
parent
6c56968f15
commit
857f725470
1 changed files with 9 additions and 5 deletions
14
scp.c
14
scp.c
|
@ -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 */
|
||||||
|
|
Loading…
Add table
Reference in a new issue