Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 3 Nov 2012 22:23:09 +0000 (UTC)
From:      Jilles Tjoelker <jilles@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242530 - head/bin/sh
Message-ID:  <201211032223.qA3MN9wh056534@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jilles
Date: Sat Nov  3 22:23:08 2012
New Revision: 242530
URL: http://svn.freebsd.org/changeset/base/242530

Log:
  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.

Modified:
  head/bin/sh/exec.c

Modified: head/bin/sh/exec.c
==============================================================================
--- head/bin/sh/exec.c	Sat Nov  3 22:21:37 2012	(r242529)
+++ head/bin/sh/exec.c	Sat Nov  3 22:23:08 2012	(r242530)
@@ -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;



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211032223.qA3MN9wh056534>