[coreboot] Patch to fix MAX_PATH in lar

Peter Stuge peter at stuge.se
Thu Feb 28 00:57:41 CET 2008


On Wed, Feb 27, 2008 at 12:04:15PM -0700, Myles Watson wrote:
> The changes are all in util/lar/lib.c
>       use MAX_PATHLEN instead of defining a new MAX_PATH
>       do the math before any string operations and fail if the new
> name will be larger than MAX_PATHLEN
>       use strcpy and strcat since we know it's safe.
> 
> Myles
> 
> Signed-off-by: Myles Watson <mylesgw at gmail.com>

Hey - nice one!

Acked-by: Peter Stuge <peter at stuge.se>


> Index: util/lar/lib.c
> ===================================================================
> --- util/lar/lib.c	(revision 622)
> +++ util/lar/lib.c	(working copy)
> @@ -32,8 +32,6 @@
>  #include "lar.h"
>  #include "lib.h"
>  
> -#define MAX_PATH 1024
> -
>  static struct file *files = NULL;
>  
>  /**
> @@ -193,21 +191,30 @@
>  		fprintf(stderr, "Could not enter directory %s\n", name);
>  	} else {
>  		while (n--) {
> -			char fullname[MAX_PATH];
> +			char fullname[MAX_PATHLEN+1];
> +			int len = 0;
>  
> -			fullname[0] = '\0';
> -
>  			if (strncmp("..", namelist[n]->d_name, 3) &&
>  			    strncmp(".", namelist[n]->d_name, 2)) {
>  
> -				strncpy(fullname, name, MAX_PATH);
> +				len = strlen(name);
> +				len += (name[len-1]=='/'?1:0);
> +				len += strlen(namelist[n]->d_name);
>  
> +				if (len > MAX_PATHLEN) {
> +					fprintf(stderr,
> +						"%s: %s+%s exceeds MAX_PATHLEN.\n",
> +						__FUNCTION__,name,
> +						namelist[n]->d_name);
> +					return -1;
> +				}
> +
> +				strcpy(fullname, name);
>  				if (name[(strlen(name)) - 1] != '/') {
> -					strncat(fullname, "/", MAX_PATH);
> +					strcat(fullname, "/");
>  				}
>  
> -				strncat(fullname, namelist[n]->d_name,
> -					MAX_PATH);
> +				strcat(fullname, namelist[n]->d_name);
>  
>  				add_files(fullname);
>  			}




More information about the coreboot mailing list