Skip to content

Commit

Permalink
rustc: Fail fast when compiling a source file larger than 4 GiB - 1 B
Browse files Browse the repository at this point in the history
  • Loading branch information
tyilo committed Nov 22, 2024
1 parent 209799f commit 5caf516
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 1 deletion.
5 changes: 5 additions & 0 deletions compiler/rustc_span/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1843,6 +1843,8 @@ impl StableSourceFileId {
}

impl SourceFile {
const MAX_FILE_SIZE: u32 = u32::MAX - 1;

pub fn new(
name: FileName,
mut src: String,
Expand All @@ -1863,6 +1865,9 @@ impl SourceFile {
let stable_id = StableSourceFileId::from_filename_in_current_crate(&name);
let source_len = src.len();
let source_len = u32::try_from(source_len).map_err(|_| OffsetOverflowError)?;
if source_len > Self::MAX_FILE_SIZE {
return Err(OffsetOverflowError);
}

let (lines, multibyte_chars) = analyze_source_file::analyze_source_file(&src);

Expand Down
11 changes: 10 additions & 1 deletion compiler/rustc_span/src/source_map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,12 @@ impl FileLoader for RealFileLoader {
}

fn read_file(&self, path: &Path) -> io::Result<String> {
if path.metadata().is_ok_and(|metadata| metadata.len() > SourceFile::MAX_FILE_SIZE.into()) {
return Err(io::Error::other(format!(
"text files larger than {} bytes are unsupported",
SourceFile::MAX_FILE_SIZE
)));
}
fs::read_to_string(path)
}

Expand Down Expand Up @@ -297,7 +303,10 @@ impl SourceMap {
/// unmodified.
pub fn new_source_file(&self, filename: FileName, src: String) -> Lrc<SourceFile> {
self.try_new_source_file(filename, src).unwrap_or_else(|OffsetOverflowError| {
eprintln!("fatal error: rustc does not support files larger than 4GB");
eprintln!(
"fatal error: rustc does not support text files larger than {} bytes",
SourceFile::MAX_FILE_SIZE
);
crate::fatal_error::FatalError.raise()
})
}
Expand Down

0 comments on commit 5caf516

Please sign in to comment.