diff options
| author | Peter Tyser <ptyser@xes-inc.com> | 2008-12-02 12:59:51 -0600 | 
|---|---|---|
| committer | Ben Warren <biggerbadderben@gmail.com> | 2008-12-04 22:51:54 -0800 | 
| commit | 2e4970d8109d690adcf615d9e3cac7b5b2e8eaed (patch) | |
| tree | 1aee6270ebabb566cc6a7740429c481cda65aa96 /common/cmd_net.c | |
| parent | 90665e3d97948000f98846ded37c921c7ae67dd7 (diff) | |
| download | olio-uboot-2014.01-2e4970d8109d690adcf615d9e3cac7b5b2e8eaed.tar.xz olio-uboot-2014.01-2e4970d8109d690adcf615d9e3cac7b5b2e8eaed.zip | |
net: Fix download command parsing
When CONFIG_SYS_HUSH_PARSER is defined network download
commands with 1 argument in the format 'tftp "/path/file"'
do not work as expected. The hush command parser strips
the quotes from "/path/file" which causes the network
commands to interpret "/path/file" as an address
instead of the intended filename.
The previous check for a leading quote in netboot_common()
was replaced with a check which ensures only valid
numbers are treated as addresses.
Signed-off-by: Peter Tyser <ptyser@xes-inc.com>
Signed-off-by: Ben Warren <biggerbadderben@gmail.com>
Diffstat (limited to 'common/cmd_net.c')
| -rw-r--r-- | common/cmd_net.c | 20 | 
1 files changed, 12 insertions, 8 deletions
| diff --git a/common/cmd_net.c b/common/cmd_net.c index af691a474..c053d7b97 100644 --- a/common/cmd_net.c +++ b/common/cmd_net.c @@ -154,8 +154,10 @@ static int  netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])  {  	char *s; +	char *end;  	int   rcode = 0;  	int   size; +	ulong addr;  	/* pre-set load_addr */  	if ((s = getenv("loadaddr")) != NULL) { @@ -166,15 +168,17 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[])  	case 1:  		break; -	case 2:	/* only one arg - accept two forms: -		 * just load address, or just boot file name. -		 * The latter form must be written "filename" here. +	case 2:	/* +		 * Only one arg - accept two forms: +		 * Just load address, or just boot file name. The latter +		 * form must be written in a format which can not be +		 * mis-interpreted as a valid number.  		 */ -		if (argv[1][0] == '"') {	/* just boot filename */ -			copy_filename (BootFile, argv[1], sizeof(BootFile)); -		} else {			/* load address	*/ -			load_addr = simple_strtoul(argv[1], NULL, 16); -		} +		addr = simple_strtoul(argv[1], &end, 16); +		if (end == (argv[1] + strlen(argv[1]))) +			load_addr = addr; +		else +			copy_filename(BootFile, argv[1], sizeof(BootFile));  		break;  	case 3:	load_addr = simple_strtoul(argv[1], NULL, 16); |