mirror of
https://github.com/fish-shell/fish-shell
synced 2025-01-13 13:39:02 +00:00
Add syntax check to see that the for builtin is not given an insufficient number of arguments
darcs-hash:20060926124109-ac50b-b088397933fa7ea539e48fa9fcd461de8295f7ce.gz
This commit is contained in:
parent
b71f5d09b0
commit
d0f1870735
3 changed files with 42 additions and 1 deletions
|
@ -2454,7 +2454,7 @@ static int builtin_for( wchar_t **argv )
|
||||||
if( argc < 3)
|
if( argc < 3)
|
||||||
{
|
{
|
||||||
sb_printf( sb_err,
|
sb_printf( sb_err,
|
||||||
_( L"%ls: Expected at least two arguments, got %d\n"),
|
BUILTIN_FOR_ERR_COUNT,
|
||||||
argv[0] ,
|
argv[0] ,
|
||||||
argc );
|
argc );
|
||||||
builtin_print_help( argv[0], sb_err );
|
builtin_print_help( argv[0], sb_err );
|
||||||
|
|
|
@ -62,6 +62,11 @@ enum
|
||||||
*/
|
*/
|
||||||
#define BUILTIN_FOR_ERR_IN _( L"%ls: Second argument must be 'in'\n" )
|
#define BUILTIN_FOR_ERR_IN _( L"%ls: Second argument must be 'in'\n" )
|
||||||
|
|
||||||
|
/**
|
||||||
|
Error message for insufficient number of arguments
|
||||||
|
*/
|
||||||
|
#define BUILTIN_FOR_ERR_COUNT _( L"%ls: Expected at least two arguments, got %d\n")
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Error message when too many arguments are supplied to a builtin
|
Error message when too many arguments are supplied to a builtin
|
||||||
*/
|
*/
|
||||||
|
|
36
parser.c
36
parser.c
|
@ -3043,6 +3043,8 @@ int parser_test( const wchar_t * buff,
|
||||||
current_tokenizer_pos = tok_get_pos( &tok );
|
current_tokenizer_pos = tok_get_pos( &tok );
|
||||||
|
|
||||||
int last_type = tok_last_type( &tok );
|
int last_type = tok_last_type( &tok );
|
||||||
|
int end_of_cmd = 0;
|
||||||
|
|
||||||
switch( last_type )
|
switch( last_type )
|
||||||
{
|
{
|
||||||
case TOK_STRING:
|
case TOK_STRING:
|
||||||
|
@ -3512,6 +3514,8 @@ int parser_test( const wchar_t * buff,
|
||||||
had_cmd = 0;
|
had_cmd = 0;
|
||||||
is_pipeline=0;
|
is_pipeline=0;
|
||||||
forbid_pipeline=0;
|
forbid_pipeline=0;
|
||||||
|
end_of_cmd = 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3558,6 +3562,8 @@ int parser_test( const wchar_t * buff,
|
||||||
needs_cmd=1;
|
needs_cmd=1;
|
||||||
is_pipeline=1;
|
is_pipeline=1;
|
||||||
had_cmd=0;
|
had_cmd=0;
|
||||||
|
end_of_cmd = 1;
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3590,6 +3596,7 @@ int parser_test( const wchar_t * buff,
|
||||||
}
|
}
|
||||||
|
|
||||||
had_cmd = 0;
|
had_cmd = 0;
|
||||||
|
end_of_cmd = 1;
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3610,6 +3617,35 @@ int parser_test( const wchar_t * buff,
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( end_of_cmd )
|
||||||
|
{
|
||||||
|
if( cmd && wcscmp( cmd, L"for" ) == 0 )
|
||||||
|
{
|
||||||
|
if( arg_count >= 0 && arg_count < 2 )
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
Not enough arguments to the for builtin
|
||||||
|
*/
|
||||||
|
err = 1;
|
||||||
|
|
||||||
|
if( out )
|
||||||
|
{
|
||||||
|
error( SYNTAX_ERROR,
|
||||||
|
tok_get_pos( &tok ),
|
||||||
|
BUILTIN_FOR_ERR_COUNT,
|
||||||
|
L"for",
|
||||||
|
arg_count );
|
||||||
|
|
||||||
|
print_errors( out, prefix );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if( needs_cmd )
|
if( needs_cmd )
|
||||||
|
|
Loading…
Reference in a new issue