mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 20:01:22 -05:00
gccrs: lex: Prevent directories in RAIIFile
RAIIFile constructor was accepting directory filename. This lead to unattended directory opening in some part of the code (load_file_bytes) wich resulted in ice. Since RAIIFile are used for the lexer, removing the ability to open directories with RAIIFile fixes those issues and prevent future mistakes. gcc/rust/ChangeLog: * lex/rust-lex.h: Add file type check. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
This commit is contained in:
committed by
Arthur Cohen
parent
e81f5be60d
commit
b56d093e95
@@ -38,13 +38,37 @@ private:
|
||||
fclose (file);
|
||||
}
|
||||
|
||||
static bool allowed_filetype (const struct stat &statbuf)
|
||||
{
|
||||
// The file could be either
|
||||
// - a regular file
|
||||
// - a char device (/dev/null...)
|
||||
return S_ISREG (statbuf.st_mode) || S_ISCHR (statbuf.st_mode);
|
||||
}
|
||||
|
||||
public:
|
||||
RAIIFile (const char *filename) : filename (filename)
|
||||
{
|
||||
if (strcmp (filename, "-") == 0)
|
||||
file = stdin;
|
||||
{
|
||||
file = stdin;
|
||||
}
|
||||
else
|
||||
file = fopen (filename, "r");
|
||||
{
|
||||
struct stat statbuf;
|
||||
if (!(file = fopen (filename, "r")))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (-1 == fstat (fileno (file), &statbuf)
|
||||
|| !allowed_filetype (statbuf))
|
||||
{
|
||||
fclose (file);
|
||||
file = nullptr;
|
||||
errno = EISDIR;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user