Skip to content

Commit

Permalink
Added check for database dir to be outside of temp & application dirs
Browse files Browse the repository at this point in the history
  • Loading branch information
Martin Cousineau committed Jun 20, 2019
1 parent 6b6de45 commit 7c2b00b
Show file tree
Hide file tree
Showing 3 changed files with 51 additions and 14 deletions.
8 changes: 8 additions & 0 deletions toolbox/gui/gui_brainstorm.m
Expand Up @@ -1307,6 +1307,14 @@ function ShowToolTab(tabTitle)
bst_error(['The folder you selected is probably a protocol folder:' 10 BrainstormDbDir 10 10 ...
'The database folder is designed to contain multiple protocol folders.' 10 ...
'Please select a valid database folder.'], 'Database folder', 0);
elseif file_compare(bst_get('BrainstormTmpDir'), BrainstormDbDir)
bst_error('Your temporary and database directories must be different.', 'Database folder', 0);
elseif dir_contains(bst_get('BrainstormTmpDir'), BrainstormDbDir)
bst_error('Your temporary directory cannot contain your database directory.', 'Database folder', 0);
elseif file_compare(bst_get('BrainstormHomeDir'), BrainstormDbDir)
bst_error('Your application and database directories must be different.', 'Database folder', 0);
elseif dir_contains(bst_get('BrainstormHomeDir'), BrainstormDbDir)
bst_error('Your application directory cannot contain your database directory.', 'Database folder', 0);
else
isStop = 1;
end
Expand Down
16 changes: 2 additions & 14 deletions toolbox/gui/panel_options.m
Expand Up @@ -305,21 +305,9 @@ function SaveOptions()
dbDir = bst_get('BrainstormDbDir');
if file_compare(newTmpDir, dbDir)
java_dialog('warning', 'Your temporary and database directories must be different.');
changeDir = 0;
elseif dir_contains(newTmpDir, dbDir)
java_dialog('warning', 'Your temporary directory cannot contain your database directory.');
else
parentDir = fileparts(dbDir);
lastParent = [];
while ~isempty(parentDir) && ~strcmp(lastParent, parentDir)
if file_compare(newTmpDir, parentDir)
java_dialog('warning', 'Your temporary directory cannot contain your database directory.');
changeDir = 0;
break;
end
lastParent = parentDir;
parentDir = fileparts(parentDir);
end
end
if changeDir
% If temp directory changed: create directory if it doesn't exist
if file_exist(newTmpDir) || mkdir(newTmpDir)
bst_set('BrainstormTmpDir', newTmpDir);
Expand Down
41 changes: 41 additions & 0 deletions toolbox/misc/dir_contains.m
@@ -0,0 +1,41 @@
function doesContain = dir_contains(parent_dir, sub_dir)
% DIR_CONTAINS: Checks whether directory "parent_dir" contains "sub_dir"
% under one of its sub-directories (recursive).

% @=============================================================================
% This function is part of the Brainstorm software:
% https://neuroimage.usc.edu/brainstorm
%
% Copyright (c)2000-2019 University of Southern California & McGill University
% This software is distributed under the terms of the GNU General Public License
% as published by the Free Software Foundation. Further details on the GPLv3
% license can be found at http://www.gnu.org/copyleft/gpl.html.
%
% FOR RESEARCH PURPOSES ONLY. THE SOFTWARE IS PROVIDED "AS IS," AND THE
% UNIVERSITY OF SOUTHERN CALIFORNIA AND ITS COLLABORATORS DO NOT MAKE ANY
% WARRANTY, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO WARRANTIES OF
% MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, NOR DO THEY ASSUME ANY
% LIABILITY OR RESPONSIBILITY FOR THE USE OF THIS SOFTWARE.
%
% For more information type "brainstorm license" at command prompt.
% =============================================================================@
%
% Authors: Martin Cousineau, 2019

last_parent = [];
current_parent = bst_fileparts(sub_dir);

% Continue until we reach the highest directory
while ~isempty(current_parent) && ~strcmp(current_parent, last_parent)
% Check whether current directory is the one we're looking for
if file_compare(current_parent, parent_dir)
doesContain = 1;
return;
end

% Continue with parent
last_parent = current_parent;
current_parent = bst_fileparts(current_parent);
end

doesContain = 0;

0 comments on commit 7c2b00b

Please sign in to comment.