mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-03-09 15:50:02 +00:00
Add lots of checks for out of memory (re: 0ce0b671)
Huge typeset -L/-R adjustment length values were still causing crashses on sytems with not enough memory. They should error out gracefully instead of crashing. This commit adds out of memory checks to all malloc/calloc/realloc calls that didn't have them (which is all but two or three). The stkalloc/stakalloc calls don't need the checks; it has automatic checking, which is done by passing a pointer to the outofspace() function to the stakinstall() call in init.c. src/lib/libast/include/error.h: - Change the ERROR_PANIC exit status value from ERROR_LEVEL (255) to 77, which is what it is supposed to be according to the libast error.3 manual page. Exit statuses > 128 for anything else than signals are not POSIX compliant and may cause misbehaviour. src/cmd/ksh93/include/defs.h, src/cmd/ksh93/sh/init.c: - To facilitate consistency, add a simple extern sh_outofmemory() function that throws an ERROR_PANIC "out of memory". src/cmd/ksh93/include/shell.h, src/cmd/ksh93/data/builtins.c: - Remove now-redundant e_nospace[] extern message; it is now only used in one place so it might as well be a string literal in sh_outofmemory(). All other changed files: - Verify the result of all malloc/calloc/realloc calls and call sh_outofmemory() if they fail.
This commit is contained in:
parent
0ce0b67149
commit
18529b88c6
28 changed files with 138 additions and 14 deletions
|
|
@ -735,7 +735,7 @@ struct argnod *sh_argprocsub(Shell_t *shp,struct argnod *argp)
|
|||
break;
|
||||
}
|
||||
if(!shp->fifo)
|
||||
errormsg(SH_DICT,ERROR_system(128),"process substitution: FIFO creation failed");
|
||||
errormsg(SH_DICT,ERROR_PANIC,"process substitution: FIFO creation failed");
|
||||
chmod(shp->fifo,S_IRUSR|S_IWUSR); /* mkfifo + chmod works regardless of umask */
|
||||
sfputr(shp->stk,shp->fifo,0);
|
||||
#endif /* SHOPT_DEVFD */
|
||||
|
|
|
|||
|
|
@ -347,6 +347,8 @@ static Namval_t *array_find(Namval_t *np,Namarr_t *arp, int flag)
|
|||
if(data)
|
||||
{
|
||||
fp->data = (char*)malloc(fp->nelem*fp->size);
|
||||
if(!fp->data)
|
||||
sh_outofmemory();
|
||||
memcpy(fp->data,data,fp->nelem*fp->size);
|
||||
}
|
||||
else
|
||||
|
|
@ -900,6 +902,8 @@ int nv_atypeindex(Namval_t *np, const char *tname)
|
|||
if(!ap)
|
||||
ap = array_grow(np,ap,1);
|
||||
ap->xp = calloc(NV_MINSZ,1);
|
||||
if(!ap->xp)
|
||||
sh_outofmemory();
|
||||
np = nv_namptr(ap->xp,0);
|
||||
np->nvname = tp->nvname;
|
||||
nv_onattr(np,NV_MINIMAL);
|
||||
|
|
@ -1365,6 +1369,8 @@ static void array_fixed_setdata(Namval_t *np,Namarr_t* ap,struct fixed_array* fp
|
|||
fp->size = fp->ptr?sizeof(void*):nv_datasize(np,0);
|
||||
ap->nelem = n;
|
||||
fp->data = (char*)calloc(fp->nelem,fp->size);
|
||||
if(!fp->data)
|
||||
sh_outofmemory();
|
||||
if(fp->ptr)
|
||||
{
|
||||
char **cp = (char**)fp->data;
|
||||
|
|
@ -1660,6 +1666,8 @@ void *nv_associative(register Namval_t *np,const char *sp,int mode)
|
|||
ap->header.hdr.dsize = sizeof(struct assoc_array);
|
||||
ap->header.hdr.nofree &= ~1;
|
||||
}
|
||||
else
|
||||
sh_outofmemory();
|
||||
return((void*)ap);
|
||||
case NV_ADELETE:
|
||||
if(ap->cur)
|
||||
|
|
|
|||
|
|
@ -253,6 +253,8 @@ void sh_siginit(void *ptr)
|
|||
shp->st.trapcom = (char**)calloc(n,sizeof(char*));
|
||||
shp->sigflag = (unsigned char*)calloc(n,1);
|
||||
shp->gd->sigmsg = (char**)calloc(n,sizeof(char*));
|
||||
if(!shp->st.trapcom || !shp->sigflag || !shp->gd->sigmsg)
|
||||
sh_outofmemory();
|
||||
for(tp=shtab_signals; sig=tp->sh_number; tp++)
|
||||
{
|
||||
n = (sig>>SH_SIGBITS);
|
||||
|
|
|
|||
|
|
@ -219,13 +219,18 @@ static int shlvl;
|
|||
static int rand_shift;
|
||||
|
||||
|
||||
void sh_outofmemory(void)
|
||||
{
|
||||
errormsg(SH_DICT,ERROR_PANIC,"out of memory");
|
||||
}
|
||||
|
||||
/*
|
||||
* out of memory routine for stak routines
|
||||
*/
|
||||
static char *nospace(int unused)
|
||||
{
|
||||
NOT_USED(unused);
|
||||
errormsg(SH_DICT,ERROR_exit(3),e_nospace);
|
||||
sh_outofmemory();
|
||||
return(NIL(char*));
|
||||
}
|
||||
|
||||
|
|
@ -313,6 +318,8 @@ static Sfdouble_t nget_optindex(register Namval_t* np, Namfun_t *fp)
|
|||
static Namfun_t *clone_optindex(Namval_t* np, Namval_t *mp, int flags, Namfun_t *fp)
|
||||
{
|
||||
Namfun_t *dp = (Namfun_t*)malloc(sizeof(Namfun_t));
|
||||
if(!dp)
|
||||
sh_outofmemory();
|
||||
memcpy((void*)dp,(void*)fp,sizeof(Namfun_t));
|
||||
mp->nvalue.lp = np->nvalue.lp;
|
||||
dp->nofree = 0;
|
||||
|
|
@ -440,6 +447,8 @@ static void put_cdpath(register Namval_t* np,const char *val,int flags,Namfun_t
|
|||
register int c;
|
||||
char *state[4];
|
||||
sh_lexstates[ST_BEGIN] = state[0] = (char*)malloc(4*(1<<CHAR_BIT));
|
||||
if(!state[0])
|
||||
sh_outofmemory();
|
||||
memcpy(state[0],sh_lexrstates[ST_BEGIN],(1<<CHAR_BIT));
|
||||
sh_lexstates[ST_NAME] = state[1] = state[0] + (1<<CHAR_BIT);
|
||||
memcpy(state[1],sh_lexrstates[ST_NAME],(1<<CHAR_BIT));
|
||||
|
|
@ -810,6 +819,8 @@ void sh_setmatch(Shell_t *shp,const char *v, int vsize, int nmatch, regoff_t mat
|
|||
mp->match = (int*)realloc(mp->match,i+vsize+1);
|
||||
else
|
||||
mp->match = (int*)malloc(i+vsize+1);
|
||||
if(!mp->match)
|
||||
sh_outofmemory();
|
||||
mp->vsize = i+vsize+1;
|
||||
}
|
||||
mp->val = ((char*)mp->match)+i;
|
||||
|
|
@ -862,6 +873,8 @@ static char* get_match(register Namval_t* np, Namfun_t *fp)
|
|||
mp->rval[i] = 0;
|
||||
}
|
||||
mp->rval[i] = (char*)malloc(n+1);
|
||||
if(!mp->rval[i])
|
||||
sh_outofmemory();
|
||||
mp->lastsub[i] = sub;
|
||||
memcpy(mp->rval[i],val,n);
|
||||
mp->rval[i][n] = 0;
|
||||
|
|
@ -934,6 +947,8 @@ static void math_init(Shell_t *shp)
|
|||
char *name;
|
||||
int i;
|
||||
shp->mathnodes = (char*)calloc(1,MAX_MATH_ARGS*(NV_MINSZ+5));
|
||||
if(!shp->mathnodes)
|
||||
sh_outofmemory();
|
||||
name = shp->mathnodes+MAX_MATH_ARGS*NV_MINSZ;
|
||||
for(i=0; i < MAX_MATH_ARGS; i++)
|
||||
{
|
||||
|
|
@ -1064,6 +1079,8 @@ static int newconf(const char *name, const char *path, const char *value)
|
|||
{
|
||||
int i;
|
||||
char *cp = (char*)malloc(ST_NONE*(1<<CHAR_BIT));
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
for(i=0; i < ST_NONE; i++)
|
||||
{
|
||||
a2e(cp,sh_lexrstates[i]);
|
||||
|
|
@ -1714,6 +1731,8 @@ static void stat_init(Shell_t *shp)
|
|||
sp->numnodes = nstat;
|
||||
sp->nodes = (char*)(sp+1);
|
||||
shgd->stats = (int*)calloc(sizeof(int),nstat);
|
||||
if(!shgd->stats)
|
||||
sh_outofmemory();
|
||||
sp->sh = shp;
|
||||
for(i=0; i < nstat; i++)
|
||||
{
|
||||
|
|
@ -1878,6 +1897,8 @@ Dt_t *sh_inittree(Shell_t *shp,const struct shtable2 *name_vals)
|
|||
for(tp=name_vals;*tp->sh_name;tp++)
|
||||
n++;
|
||||
np = (Namval_t*)calloc(n,sizeof(Namval_t));
|
||||
if(!np)
|
||||
sh_outofmemory();
|
||||
if(!shgd->bltin_nodes)
|
||||
{
|
||||
shgd->bltin_nodes = np;
|
||||
|
|
|
|||
|
|
@ -422,6 +422,8 @@ int sh_iovalidfd(Shell_t *shp, int fd)
|
|||
n = max;
|
||||
max = shp->gd->lim.open_max;
|
||||
shp->sftable = (Sfio_t**)calloc((n+1)*(sizeof(int*)+sizeof(Sfio_t*)+1),1);
|
||||
if(!shp->sftable)
|
||||
sh_outofmemory();
|
||||
if(max)
|
||||
memcpy(shp->sftable,sftable,max*sizeof(Sfio_t*));
|
||||
shp->fdptrs = (int**)(&shp->sftable[n]);
|
||||
|
|
@ -469,6 +471,8 @@ void sh_ioinit(Shell_t *shp)
|
|||
{
|
||||
filemapsize = 8;
|
||||
filemap = (struct fdsave*)malloc(filemapsize*sizeof(struct fdsave));
|
||||
if(!filemap)
|
||||
sh_outofmemory();
|
||||
sh_iovalidfd(shp,16);
|
||||
shp->sftable[0] = sfstdin;
|
||||
shp->sftable[1] = sfstdout;
|
||||
|
|
@ -480,6 +484,8 @@ void sh_ioinit(Shell_t *shp)
|
|||
shp->outpool = sfopen(NIL(Sfio_t*),NIL(char*),"sw"); /* pool identifier */
|
||||
shp->outbuff = (char*)malloc(IOBSIZE+4);
|
||||
shp->errbuff = (char*)malloc(IOBSIZE/4);
|
||||
if(!shp->outbuff || !shp->errbuff)
|
||||
sh_outofmemory();
|
||||
sfsetbuf(sfstderr,shp->errbuff,IOBSIZE/4);
|
||||
sfsetbuf(sfstdout,shp->outbuff,IOBSIZE);
|
||||
sfpool(sfstdout,shp->outpool,SF_WRITE);
|
||||
|
|
@ -1576,6 +1582,8 @@ static int io_heredoc(Shell_t *shp,register struct ionod *iop, const char *name,
|
|||
if(sffileno(tmp)>0)
|
||||
{
|
||||
sfsetbuf(tmp,malloc(IOBSIZE+1),IOBSIZE);
|
||||
if(!tmp)
|
||||
sh_outofmemory();
|
||||
sfset(tmp,SF_MALLOC,1);
|
||||
}
|
||||
sfseek(shp->heredocs,off,SEEK_SET);
|
||||
|
|
@ -1640,7 +1648,7 @@ void sh_iosave(Shell_t *shp, register int origfd, int oldtop, char *name)
|
|||
long moved;
|
||||
filemapsize += 8;
|
||||
if(!(filemap = (struct fdsave*)realloc(filemap,filemapsize*sizeof(struct fdsave))))
|
||||
errormsg(SH_DICT,ERROR_exit(4),e_nospace);
|
||||
sh_outofmemory();
|
||||
if(moved = (char*)filemap - oldptr)
|
||||
{
|
||||
for(savefd=shp->gd->lim.open_max; --savefd>=0; )
|
||||
|
|
|
|||
|
|
@ -1206,7 +1206,11 @@ void job_clear(void)
|
|||
job.curpgid = 0;
|
||||
job.toclear = 0;
|
||||
if(!job.freejobs)
|
||||
{
|
||||
job.freejobs = (unsigned char*)malloc((unsigned)(j+1));
|
||||
if(!job.freejobs)
|
||||
sh_outofmemory();
|
||||
}
|
||||
while(j >=0)
|
||||
job.freejobs[j--] = 0;
|
||||
job_unlock();
|
||||
|
|
|
|||
|
|
@ -2486,6 +2486,8 @@ static void setupalias(Lex_t *lp, const char *string,Namval_t *np)
|
|||
{
|
||||
register Sfio_t *iop, *base;
|
||||
struct alias *ap = (struct alias*)malloc(sizeof(struct alias));
|
||||
if(!ap)
|
||||
sh_outofmemory();
|
||||
ap->disc = alias_disc;
|
||||
ap->lp = lp;
|
||||
ap->buf[1] = 0;
|
||||
|
|
@ -2525,6 +2527,8 @@ static int stack_grow(Lex_t *lp)
|
|||
lp->lexd.lex_match = (int*)realloc((char*)lp->lexd.lex_match,sizeof(int)*lp->lexd.lex_max);
|
||||
else
|
||||
lp->lexd.lex_match = (int*)malloc(sizeof(int)*STACK_ARRAY);
|
||||
return(lp->lexd.lex_match!=0);
|
||||
if(!lp->lexd.lex_match)
|
||||
sh_outofmemory();
|
||||
return(1);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -972,6 +972,8 @@ static char *prefix(Shell_t *shp, char *id)
|
|||
nv_putsub(np,sub,0L);
|
||||
}
|
||||
id = (char*)malloc(strlen(cp)+1+(n=strlen(sp=nv_name(np)))+ (sub?strlen(sub)+3:1));
|
||||
if(!id)
|
||||
sh_outofmemory();
|
||||
memcpy(id,sp,n);
|
||||
if(sub)
|
||||
{
|
||||
|
|
@ -2162,7 +2164,12 @@ static void comsubst(Mac_t *mp,register Shnode_t* t, int type)
|
|||
goto out_offset;
|
||||
}
|
||||
if(!(sp=mp->shp->sftable[fd]))
|
||||
sp = sfnew(NIL(Sfio_t*),(char*)malloc(IOBSIZE+1),IOBSIZE,fd,SF_READ|SF_MALLOC);
|
||||
{
|
||||
char *cp = (char*)malloc(IOBSIZE+1);
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
sp = sfnew(NIL(Sfio_t*),cp,IOBSIZE,fd,SF_READ|SF_MALLOC);
|
||||
}
|
||||
type = 3;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -127,7 +127,6 @@ int sh_main(int ac, char *av[], Shinit_f userinit)
|
|||
struct stat statb;
|
||||
int i, rshflag; /* set for restricted shell */
|
||||
char *command;
|
||||
free(malloc(64*1024));
|
||||
#ifdef _lib_sigvec
|
||||
/* This is to clear mask that may be left on by rlogin */
|
||||
clearsigmask(SIGALRM);
|
||||
|
|
@ -322,6 +321,8 @@ int sh_main(int ac, char *av[], Shinit_f userinit)
|
|||
/* try sh -c 'name "$@"' */
|
||||
sh_onoption(SH_CFLAG);
|
||||
shp->comdiv = (char*)malloc(strlen(name)+7);
|
||||
if(!shp->comdiv)
|
||||
sh_outofmemory();
|
||||
name = strcopy(shp->comdiv,name);
|
||||
if(shp->st.dolc)
|
||||
strcopy(name," \"$@\"");
|
||||
|
|
|
|||
|
|
@ -127,6 +127,8 @@ static char *getbuf(size_t len)
|
|||
buf = (char*)malloc(len);
|
||||
else
|
||||
buf = (char*)realloc(buf,len);
|
||||
if(!buf)
|
||||
sh_outofmemory();
|
||||
buflen = len;
|
||||
}
|
||||
return(buf);
|
||||
|
|
@ -229,6 +231,8 @@ Namval_t *nv_addnode(Namval_t* np, int remove)
|
|||
{
|
||||
sp->maxnodes += 20;
|
||||
sp->nodes = (Namval_t**)realloc(sp->nodes,sizeof(Namval_t*)*sp->maxnodes);
|
||||
if(!sp->nodes)
|
||||
sh_outofmemory();
|
||||
}
|
||||
sp->nodes[sp->numnodes++] = np;
|
||||
return(np);
|
||||
|
|
@ -282,6 +286,8 @@ void nv_setlist(register struct argnod *arg,register int flags, Namval_t *typ)
|
|||
shtp.maxnodes = 20;
|
||||
shtp.rp = 0;
|
||||
shtp.nodes =(Namval_t**)malloc(shtp.maxnodes*sizeof(Namval_t*));
|
||||
if(!shtp.nodes)
|
||||
sh_outofmemory();
|
||||
}
|
||||
#endif /* SHOPT_TYPEDEF*/
|
||||
#if SHOPT_NAMESPACE
|
||||
|
|
@ -1428,6 +1434,8 @@ Namval_t *nv_open(const char *name, Dt_t *root, int flags)
|
|||
xp->name = malloc(c);
|
||||
else
|
||||
xp->name = realloc(xp->name,c);
|
||||
if(!xp->name)
|
||||
sh_outofmemory();
|
||||
xp->size = c;
|
||||
}
|
||||
memcpy(xp->name,name,xp->len);
|
||||
|
|
@ -1897,7 +1905,10 @@ void nv_putval(register Namval_t *np, const char *string, int flags)
|
|||
size = nv_size(np);
|
||||
if(size==0)
|
||||
size = oldsize + (3*dot/4);
|
||||
*(cp = (char*)malloc(size+1)) = 0;
|
||||
cp = (char*)malloc(size+1);
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
*cp = 0;
|
||||
nv_offattr(np,NV_NOFREE);
|
||||
if(oldsize)
|
||||
memcpy((void*)cp,(void*)up->cp,oldsize);
|
||||
|
|
@ -1960,6 +1971,8 @@ void nv_putval(register Namval_t *np, const char *string, int flags)
|
|||
}
|
||||
else
|
||||
cp = (char*)malloc(dot+append+1);
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
cp[dot+append] = 0;
|
||||
nv_offattr(np,NV_NOFREE);
|
||||
}
|
||||
|
|
@ -3037,18 +3050,24 @@ void nv_newattr (register Namval_t *np, unsigned newatts, int size)
|
|||
{
|
||||
/* allocate to match existing value for numerics and auto length assignment for -L/R/Z */
|
||||
cp = (char*)malloc((size_t)n + 1);
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
strcpy(cp, sp);
|
||||
}
|
||||
else if(size>=n)
|
||||
{
|
||||
/* growing string */
|
||||
cp = (char*)malloc((size_t)size + 1);
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
strcpy(cp, sp);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* shrinking string */
|
||||
cp = (char*)malloc((size_t)size + 1);
|
||||
if(!cp)
|
||||
sh_outofmemory();
|
||||
if(newatts&NV_RJUST)
|
||||
strncpy(cp, n - size + sp, size);
|
||||
else
|
||||
|
|
|
|||
|
|
@ -878,7 +878,7 @@ static void *num_clone(register Namval_t *np, void *val)
|
|||
size = sizeof(int32_t);
|
||||
}
|
||||
if(!(nval = malloc(size)))
|
||||
return(0);
|
||||
sh_outofmemory();
|
||||
memcpy(nval,val,size);
|
||||
return(nval);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -327,6 +327,8 @@ static int fixnode(Namtype_t *dp, Namtype_t *pp, int i, struct Namref *nrp,int f
|
|||
{
|
||||
const char *cp = nq->nvalue.cp;
|
||||
nq->nvalue.cp = (char*)malloc(i);
|
||||
if(!nq->nvalue.cp)
|
||||
sh_outofmemory();
|
||||
memcpy((char*)nq->nvalue.cp,cp,i);
|
||||
}
|
||||
else
|
||||
|
|
@ -366,6 +368,8 @@ static Namfun_t *clone_type(Namval_t* np, Namval_t *mp, int flags, Namfun_t *fp)
|
|||
if(size==0 && (!fp->disc || (size=fp->disc->dsize)==0))
|
||||
size = sizeof(Namfun_t);
|
||||
dp = (Namtype_t*)malloc(size+pp->nref*sizeof(struct Namref));
|
||||
if(!dp)
|
||||
sh_outofmemory();
|
||||
if(pp->nref)
|
||||
{
|
||||
nrp = (struct Namref*)((char*)dp + size);
|
||||
|
|
@ -576,6 +580,8 @@ static Namval_t *next_type(register Namval_t* np, Dt_t *root,Namfun_t *fp)
|
|||
static Namfun_t *clone_inttype(Namval_t* np, Namval_t *mp, int flags, Namfun_t *fp)
|
||||
{
|
||||
Namfun_t *pp= (Namfun_t*)malloc(fp->dsize);
|
||||
if(!pp)
|
||||
sh_outofmemory();
|
||||
memcpy((void*)pp, (void*)fp, fp->dsize);
|
||||
fp->nofree &= ~1;
|
||||
if(nv_isattr(mp,NV_NOFREE) && mp->nvalue.cp)
|
||||
|
|
|
|||
|
|
@ -173,6 +173,8 @@ static void typeset_order(const char *str,int line)
|
|||
if(!table)
|
||||
{
|
||||
table = calloc(1,256);
|
||||
if(!table)
|
||||
sh_outofmemory();
|
||||
for(cp=(unsigned char*)"bflmnprstuxACHS";c = *cp; cp++)
|
||||
table[c] = 1;
|
||||
for(cp=(unsigned char*)"aiEFLRXhTZ";c = *cp; cp++)
|
||||
|
|
|
|||
|
|
@ -186,6 +186,8 @@ static pid_t path_xargs(Shell_t *shp,const char *path, char *argv[],char *const
|
|||
{
|
||||
n = nlast*sizeof(char*);
|
||||
saveargs = (char**)malloc(n);
|
||||
if(!saveargs)
|
||||
sh_outofmemory();
|
||||
memcpy((void*)saveargs, (void*)av, n);
|
||||
memcpy((void*)av,(void*)avlast,n);
|
||||
}
|
||||
|
|
@ -566,6 +568,8 @@ char *path_fullname(Shell_t *shp,const char *name)
|
|||
dirlen = strlen(pwd)+1;
|
||||
}
|
||||
path = (char*)malloc(len+dirlen);
|
||||
if(!path)
|
||||
sh_outofmemory();
|
||||
if(dirlen)
|
||||
{
|
||||
memcpy((void*)path,(void*)pwd,dirlen);
|
||||
|
|
@ -1177,6 +1181,8 @@ pid_t path_spawn(Shell_t *shp,const char *opath,register char **argv, char **env
|
|||
* may not yield the same results
|
||||
*/
|
||||
char *sp = (char*)malloc(strlen(path)+3);
|
||||
if(!sp)
|
||||
sh_outofmemory();
|
||||
sp[0] = '.';
|
||||
sp[1] = '/';
|
||||
strcpy(sp+2,path);
|
||||
|
|
@ -1505,6 +1511,8 @@ static Pathcomp_t *path_addcomp(Shell_t *shp,Pathcomp_t *first, Pathcomp_t *old,
|
|||
pp->dev = 1;
|
||||
pp->flags |= PATH_BUILTIN_LIB;
|
||||
pp->blib = pp->bbuf = malloc(sizeof(LIBCMD));
|
||||
if(!pp->blib)
|
||||
sh_outofmemory();
|
||||
strcpy(pp->blib,LIBCMD);
|
||||
return(first);
|
||||
}
|
||||
|
|
@ -1575,6 +1583,8 @@ static int path_chkpaths(Shell_t *shp,Pathcomp_t *first, Pathcomp_t* old,Pathcom
|
|||
else if(m)
|
||||
{
|
||||
pp->lib = (char*)malloc(cp-sp+pp->len+2);
|
||||
if(!pp->lib)
|
||||
sh_outofmemory();
|
||||
memcpy((void*)pp->lib,(void*)sp,m);
|
||||
memcpy((void*)&pp->lib[m],stakptr(offset),pp->len);
|
||||
pp->lib[k=m+pp->len] = '/';
|
||||
|
|
|
|||
|
|
@ -308,6 +308,8 @@ Namval_t *sh_assignok(register Namval_t *np,int add)
|
|||
}
|
||||
/* first two pointers use linkage from np */
|
||||
lp = (struct Link*)malloc(sizeof(*np)+2*sizeof(void*));
|
||||
if(!lp)
|
||||
sh_outofmemory();
|
||||
memset(lp,0, sizeof(*mp)+2*sizeof(void*));
|
||||
lp->node = np;
|
||||
if(!add && nv_isvtree(np))
|
||||
|
|
@ -614,6 +616,8 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_t *t, volatile int flags, int comsub)
|
|||
if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
|
||||
{
|
||||
savsig = malloc(nsig * sizeof(char*));
|
||||
if(!savsig)
|
||||
sh_outofmemory();
|
||||
/*
|
||||
* the data is, usually, modified in code like:
|
||||
* tmp = buf[i]; buf[i] = strdup(tmp); free(tmp);
|
||||
|
|
|
|||
|
|
@ -330,6 +330,8 @@ int eaccess(register const char *name, register int mode)
|
|||
}
|
||||
}
|
||||
groups = (gid_t*)malloc((maxgroups+1)*sizeof(gid_t));
|
||||
if(!groups)
|
||||
error(ERROR_PANIC,"out of memory");
|
||||
n = getgroups(maxgroups,groups);
|
||||
while(--n >= 0)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1869,7 +1869,10 @@ int sh_exec(register const Shnode_t *t, int flags)
|
|||
if((nsig=shp->st.trapmax*sizeof(char*))>0 || shp->st.trapcom[0])
|
||||
{
|
||||
nsig += sizeof(char*);
|
||||
memcpy(savsig=malloc(nsig),(char*)&shp->st.trapcom[0],nsig);
|
||||
savsig = malloc(nsig);
|
||||
if(!savsig)
|
||||
sh_outofmemory();
|
||||
memcpy(savsig,(char*)&shp->st.trapcom[0],nsig);
|
||||
shp->st.otrapcom = (char**)savsig;
|
||||
}
|
||||
sh_sigreset(0);
|
||||
|
|
@ -3113,6 +3116,8 @@ int sh_funscope(int argn, char *argv[],int(*fun)(void*),void *arg,int execflg)
|
|||
if((nsig=shp->st.trapmax)>0 || shp->st.trapcom[0])
|
||||
{
|
||||
savsig = malloc(nsig * sizeof(char*));
|
||||
if(!savsig)
|
||||
sh_outofmemory();
|
||||
/*
|
||||
* the data is, usually, modified in code like:
|
||||
* tmp = buf[i]; buf[i] = strdup(tmp); free(tmp);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue