sh: Use C99 flexible array instead of accessing array beyond bounds.
Although sufficient memory is available for a longer string in cmdname, this is undefined behaviour anyway. Side effect: for alignment reasons, an additional byte of memory is allocated per hashed command.
This commit is contained in:
parent
305921c48e
commit
422c281c83
@ -78,7 +78,6 @@ __FBSDID("$FreeBSD$");
|
||||
|
||||
|
||||
#define CMDTABLESIZE 31 /* should be prime */
|
||||
#define ARB 1 /* actual size determined at run time */
|
||||
|
||||
|
||||
|
||||
@ -88,7 +87,7 @@ struct tblentry {
|
||||
int special; /* flag for special builtin commands */
|
||||
short cmdtype; /* index identifying command */
|
||||
char rehash; /* if set, cd done since entry created */
|
||||
char cmdname[ARB]; /* name of command */
|
||||
char cmdname[]; /* name of command */
|
||||
};
|
||||
|
||||
|
||||
@ -563,7 +562,7 @@ cmdlookup(const char *name, int add)
|
||||
}
|
||||
if (add && cmdp == NULL) {
|
||||
INTOFF;
|
||||
cmdp = *pp = ckmalloc(sizeof (struct tblentry) - ARB
|
||||
cmdp = *pp = ckmalloc(sizeof (struct tblentry)
|
||||
+ strlen(name) + 1);
|
||||
cmdp->next = NULL;
|
||||
cmdp->cmdtype = CMDUNKNOWN;
|
||||
|
Loading…
Reference in New Issue
Block a user