From 422c281c8313d7441edeffeed6c44bf33a36092b Mon Sep 17 00:00:00 2001 From: Jilles Tjoelker Date: Sat, 3 Nov 2012 22:23:08 +0000 Subject: [PATCH] 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. --- bin/sh/exec.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bin/sh/exec.c b/bin/sh/exec.c index cd495895e03d..7ebf450621f4 100644 --- a/bin/sh/exec.c +++ b/bin/sh/exec.c @@ -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;