Skip to content

Commit 85704d6

Browse files
committed
do not treat directories like regular files in existence checks
1 parent 95d8b17 commit 85704d6

File tree

3 files changed

+56
-3
lines changed

3 files changed

+56
-3
lines changed

main.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,10 @@ int main(int argc, char **argv)
121121
std::cout << "error: could not open file '" << filename << "'" << std::endl;
122122
std::exit(1);
123123
}
124+
if (!simplecpp::isFile(filename)) {
125+
std::cout << "error: could not open file '" << filename << "' - not a regular file" << std::endl;
126+
std::exit(1);
127+
}
124128
rawtokens = new simplecpp::TokenList(f, files,filename,&outputList);
125129
} else {
126130
rawtokens = new simplecpp::TokenList(filename,files,&outputList);

simplecpp.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2981,9 +2981,11 @@ static std::string openHeaderDirect(std::ifstream &f, const std::string &path)
29812981
if (nonExistingFilesCache.contains(path))
29822982
return ""; // file is known not to exist, skip expensive file open call
29832983
#endif
2984-
f.open(path.c_str());
2985-
if (f.is_open())
2986-
return path;
2984+
if (simplecpp::isFile(path)) {
2985+
f.open(path.c_str());
2986+
if (f.is_open())
2987+
return path;
2988+
}
29872989
#ifdef SIMPLECPP_WINDOWS
29882990
nonExistingFilesCache.add(path);
29892991
#endif
@@ -3104,6 +3106,9 @@ bool simplecpp::FileDataCache::getFileId(const std::string &path, FileID &id)
31043106
if (stat(path.c_str(), &statbuf) != 0)
31053107
return false;
31063108

3109+
if ((statbuf.st_mode & S_IFMT) != S_IFREG)
3110+
return false;
3111+
31073112
id.dev = statbuf.st_dev;
31083113
id.ino = statbuf.st_ino;
31093114

test.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2053,6 +2053,44 @@ static void missingHeader4()
20532053
ASSERT_EQUALS("file0,1,syntax_error,No header in #include\n", toString(outputList));
20542054
}
20552055

2056+
#ifndef _WIN32
2057+
static void missingHeader5()
2058+
{
2059+
// this is a directory
2060+
const char code[] = "#include \"/\"\n";
2061+
simplecpp::OutputList outputList;
2062+
ASSERT_EQUALS("", preprocess(code, &outputList));
2063+
ASSERT_EQUALS("file0,1,missing_header,Header not found: \"/\"\n", toString(outputList));
2064+
}
2065+
2066+
static void missingHeader6()
2067+
{
2068+
// this is a directory
2069+
const char code[] = "#include \"/usr\"\n";
2070+
simplecpp::OutputList outputList;
2071+
ASSERT_EQUALS("", preprocess(code, &outputList));
2072+
ASSERT_EQUALS("file0,1,missing_header,Header not found: \"/usr\"\n", toString(outputList));
2073+
}
2074+
2075+
static void missingHeader7()
2076+
{
2077+
// this is a directory
2078+
const char code[] = "#include </>\n";
2079+
simplecpp::OutputList outputList;
2080+
ASSERT_EQUALS("", preprocess(code, &outputList));
2081+
ASSERT_EQUALS("file0,1,missing_header,Header not found: </>\n", toString(outputList));
2082+
}
2083+
2084+
static void missingHeader8()
2085+
{
2086+
// this is a directory
2087+
const char code[] = "#include </usr>\n";
2088+
simplecpp::OutputList outputList;
2089+
ASSERT_EQUALS("", preprocess(code, &outputList));
2090+
ASSERT_EQUALS("file0,1,missing_header,Header not found: </usr>\n", toString(outputList));
2091+
}
2092+
#endif
2093+
20562094
static void nestedInclude()
20572095
{
20582096
const char code[] = "#include \"test.h\"\n";
@@ -3356,6 +3394,12 @@ int main(int argc, char **argv)
33563394
TEST_CASE(missingHeader2);
33573395
TEST_CASE(missingHeader3);
33583396
TEST_CASE(missingHeader4);
3397+
#ifndef _WIN32
3398+
TEST_CASE(missingHeader5);
3399+
TEST_CASE(missingHeader6);
3400+
TEST_CASE(missingHeader7);
3401+
TEST_CASE(missingHeader8);
3402+
#endif
33593403
TEST_CASE(nestedInclude);
33603404
TEST_CASE(systemInclude);
33613405
TEST_CASE(circularInclude);

0 commit comments

Comments
 (0)