1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-03-09 15:50:02 +00:00

sh_setmatch(): fix node size calculation

This fixes the function that sets ${.sh.match}. Patch from OpenSUSE:
https://build.opensuse.org/package/view_file/shells/ksh/ksh93-limit-name-len.dif

src/cmd/ksh93/sh/init.c: sh_setmatch():
- Fix node size calculation, possibly preventing data corruption.

src/cmd/ksh93/include/ulimit.h: Limit_t:
- Defining the 'name' struct member as 'char name[16]' makes
  no sense as the name is being initialised statically in
  data/limits.c; just make it a 'char *name' pointer.
This commit is contained in:
Martijn Dekker 2021-02-02 11:52:54 +00:00
parent 3002c4113e
commit 9f980ba65a
2 changed files with 3 additions and 3 deletions

View file

@ -157,7 +157,7 @@
typedef struct Limit_s typedef struct Limit_s
{ {
const char name[16]; const char* name;
const char* description; const char* description;
int index; int index;
const char* conf; const char* conf;

View file

@ -161,7 +161,7 @@ struct match
char *val; char *val;
char *rval[2]; char *rval[2];
regoff_t *match; regoff_t *match;
char node[NV_MINSZ+sizeof(char*)]; char node[NV_MINSZ+sizeof(char*)+sizeof(Dtlink_t)];
regoff_t first; regoff_t first;
int vsize; int vsize;
int nmatch; int nmatch;
@ -721,7 +721,7 @@ static int hasgetdisc(register Namfun_t *fp)
void sh_setmatch(Shell_t *shp,const char *v, int vsize, int nmatch, regoff_t match[],int index) void sh_setmatch(Shell_t *shp,const char *v, int vsize, int nmatch, regoff_t match[],int index)
{ {
struct match *mp = &ip->SH_MATCH_init; struct match *mp = &ip->SH_MATCH_init;
Namval_t *np = nv_namptr(mp->node,0); Namval_t *np = (Namval_t*)(&(mp->node[0]));
register int i,n,x; register int i,n,x;
unsigned int savesub = shp->subshell; unsigned int savesub = shp->subshell;
Namarr_t *ap = nv_arrayptr(SH_MATCHNOD); Namarr_t *ap = nv_arrayptr(SH_MATCHNOD);