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