From a91bf6d88ace4e0fe8281b3b59dd9406d7cb01e0 Mon Sep 17 00:00:00 2001 From: James Vega Date: Fri, 16 Dec 2005 03:21:22 +1000 Subject: [PATCH] builtin.c: builtin_source now checks that its argument is a file. Without this check, it would be possible to attempt to source a directory and get stuck in an infinite loop. darcs-hash:20051215172122-35ec8-b3ce05d8d7ee9534edf92b74ca842d034b894e8a.gz --- builtin.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/builtin.c b/builtin.c index 8c01d3a93..d2b37a2e2 100644 --- a/builtin.c +++ b/builtin.c @@ -2163,6 +2163,7 @@ static int builtin_source( wchar_t ** argv ) { int fd; int res; + struct stat buf; if( (argv[1] == 0) || (argv[2]!=0) ) { @@ -2173,6 +2174,19 @@ static int builtin_source( wchar_t ** argv ) return 1; } + if( wstat(argv[1], &buf) == -1 ) + { + builtin_wperror( L"stat" ); + res = 1; + } + + if( !S_ISREG(buf.st_mode) ) + { + sb_append2( sb_err, argv[0], L": Expected a regular file\n", (void *)0 ); + builtin_print_help( argv[0], sb_err ); + + return 1; + } if( ( fd = wopen( argv[1], O_RDONLY ) ) == -1 ) { builtin_wperror( L"open" );