diff options
author | Björn Gustavsson <[email protected]> | 2011-02-02 11:09:50 +0100 |
---|---|---|
committer | Björn Gustavsson <[email protected]> | 2011-02-14 11:49:47 +0100 |
commit | eb6d08af973484e37e3efb0f159cf732cc618e2a (patch) | |
tree | 21db93b77d326f374687518852da26b0fc95a3d8 | |
parent | 62dad961329a603110ce0e1d3f62554cc5228152 (diff) | |
download | otp-eb6d08af973484e37e3efb0f159cf732cc618e2a.tar.gz otp-eb6d08af973484e37e3efb0f159cf732cc618e2a.tar.bz2 otp-eb6d08af973484e37e3efb0f159cf732cc618e2a.zip |
Never allow os:find_executable/1 to return the path of directories
-rw-r--r-- | lib/kernel/src/os.erl | 7 | ||||
-rw-r--r-- | lib/kernel/test/os_SUITE.erl | 17 |
2 files changed, 20 insertions, 4 deletions
diff --git a/lib/kernel/src/os.erl b/lib/kernel/src/os.erl index 75a11a8afd..ce8c581e08 100644 --- a/lib/kernel/src/os.erl +++ b/lib/kernel/src/os.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2010. All Rights Reserved. +%% Copyright Ericsson AB 1997-2011. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -82,8 +82,9 @@ verify_executable(Name0, [Ext|Rest], OrigExtensions) -> end; _ -> case file:read_file_info(Name1) of - {ok, #file_info{mode=Mode}} when Mode band 8#111 =/= 0 -> - %% XXX This test for execution permission is not full-proof + {ok, #file_info{type=regular,mode=Mode}} + when Mode band 8#111 =/= 0 -> + %% XXX This test for execution permission is not fool-proof %% on Unix, since we test if any execution bit is set. {ok, Name1}; _ -> diff --git a/lib/kernel/test/os_SUITE.erl b/lib/kernel/test/os_SUITE.erl index eacf3c7584..3f6a7f4392 100644 --- a/lib/kernel/test/os_SUITE.erl +++ b/lib/kernel/test/os_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2010. All Rights Reserved. +%% Copyright Ericsson AB 1997-2011. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in @@ -156,6 +156,21 @@ find_executable(Config) when is_list(Config) -> ?line find_exe(Current, "my_batch", ".bat", Path), ok; {unix, _} -> + DataDir = ?config(data_dir, Config), + + %% Smoke test. + case lib:progname() of + erl -> + ?line ErlPath = os:find_executable("erl"), + ?line true = is_list(ErlPath), + ?line true = filelib:is_regular(ErlPath); + _ -> + %% Don't bother -- the progname could include options. + ok + end, + + %% Never return a directory name. + ?line false = os:find_executable("unix", [DataDir]), ok; vxworks -> ok |