diff --git a/cli/cmdlineparser.cpp b/cli/cmdlineparser.cpp index 2b3ce7cff40..79b7e0ae4f7 100644 --- a/cli/cmdlineparser.cpp +++ b/cli/cmdlineparser.cpp @@ -1168,6 +1168,10 @@ CmdLineParser::Result CmdLineParser::parseFromArgs(int argc, const char* const a // read underlying project projectFile = projectFileGui; projType = project.import(projectFileGui, &mSettings, &mSuppressions); + if (projType == ImportProject::Type::CPPCHECK_GUI) { + mLogger.printError("nested Cppcheck GUI projects are not supported."); + return Result::Fail; + } } } if (projType == ImportProject::Type::VS_SLN || projType == ImportProject::Type::VS_VCXPROJ) { diff --git a/test/cli/more-projects_test.py b/test/cli/more-projects_test.py index e82231cfcc8..f61b0c42e9f 100644 --- a/test/cli/more-projects_test.py +++ b/test/cli/more-projects_test.py @@ -861,3 +861,39 @@ def test_shared_items_project(): # Assume no errors, and that shared items code files have been checked as well assert '2/2 files checked ' in stdout # only perform partial check since -j2 does not report a percentage right now assert stderr == '' + + +def test_project_file_nested(tmp_path): + test_file = tmp_path / 'test.c' + with open(test_file, 'wt'): + pass + + level3_file = tmp_path / 'level3.cppcheck' + with open(level3_file, 'wt') as f: + f.write( +""" + + + +""".format(test_file)) + + level2_file = tmp_path / 'level2.cppcheck' + with open(level2_file, 'wt') as f: + f.write( +""" + level3.cppcheck +""") + + level1_file = tmp_path / 'level1.cppcheck' + with open(level1_file, 'wt') as f: + f.write( +""" + level2.cppcheck +""") + + args = ['--project={}'.format(level1_file)] + out_lines = [ + 'cppcheck: error: nested Cppcheck GUI projects are not supported.' + ] + + assert_cppcheck(args, ec_exp=1, err_exp=[], out_exp=out_lines) \ No newline at end of file