SCP: Fix memory leak when accessing externally defined environment variables

This commit is contained in:
Mark Pizzolato 2021-08-23 12:17:18 -07:00
parent 09db504f65
commit 3f3884ddb6

19
scp.c
View file

@ -4415,11 +4415,15 @@ if (fixup_needed) {
memcpy (tgbuf, gbuf, (fixup_needed - gbuf)); memcpy (tgbuf, gbuf, (fixup_needed - gbuf));
gbuf = tgbuf; gbuf = tgbuf;
} }
for (i = 0; i < sim_external_env_count; i++) {
if (0 == strcmp (gbuf, sim_external_env[i].name))
return sim_external_env[i].value;
}
ap = _sim_gen_env_uplowcase (gbuf, rbuf, rbuf_size);/* Look for environment variable */ ap = _sim_gen_env_uplowcase (gbuf, rbuf, rbuf_size);/* Look for environment variable */
if (!ap) { /* no environment variable found? */
for (i = 0; i < sim_external_env_count; i++) {
if (0 == strcmp (gbuf, sim_external_env[i].name)) {
ap = sim_external_env[i].value;
break;
}
}
}
if (!ap) { /* no environment variable found? */ if (!ap) { /* no environment variable found? */
time_t now = (time_t)cmd_time.tv_sec; time_t now = (time_t)cmd_time.tv_sec;
struct tm *tmnow = localtime(&now); struct tm *tmnow = localtime(&now);
@ -6203,7 +6207,7 @@ const char *_sim_uname (UNIT *uptr)
return _sim_uname_prefix (uptr, ""); return _sim_uname_prefix (uptr, "");
} }
const char *_sim_dname_space () const char *_sim_dname_space (void)
{ {
return _sim_dname_prefix (NULL, ""); return _sim_dname_prefix (NULL, "");
} }
@ -15418,6 +15422,11 @@ Operator *op = NULL, *last_op;
Stack *stack2 = new_Stack(); /* operator stack */ Stack *stack2 = new_Stack(); /* operator stack */
char gbuf[CBUFSIZE]; char gbuf[CBUFSIZE];
if (stack2 == NULL) {
*stat = SCPE_MEM;
return cptr;
}
*stat = SCPE_OK;
while (sim_isspace(*cptr)) /* skip leading whitespace */ while (sim_isspace(*cptr)) /* skip leading whitespace */
++cptr; ++cptr;
if (parens_required && (*cptr != '(')) { if (parens_required && (*cptr != '(')) {