Skip to content

Commit 9a8bbe9

Browse files
committed
Added hash verification to external source loading.
1 parent a5b8851 commit 9a8bbe9

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

src/libsyntax/codemap.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -567,13 +567,8 @@ impl CodeMapper for CodeMap {
567567
};
568568

569569
if *file_map.external_src.borrow() == ExternalSource::AbsentOk {
570-
let mut external_src = file_map.external_src.borrow_mut();
571-
if let Ok(src) = self.file_loader.read_file(Path::new(&filename)) {
572-
*external_src = ExternalSource::Present(src);
573-
return true;
574-
} else {
575-
*external_src = ExternalSource::AbsentErr;
576-
}
570+
let src = self.file_loader.read_file(Path::new(&filename)).ok();
571+
return file_map.add_external_src(src);
577572
}
578573

579574
false

src/libsyntax_pos/lib.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,26 @@ impl FileMap {
604604
lines.push(pos);
605605
}
606606

607+
/// add externally loaded source.
608+
/// if the hash of the input doesn't match or no input is supplied via None,
609+
/// it is interpreted as an error and the corresponding enum variant is set.
610+
pub fn add_external_src(&self, src: Option<String>) -> bool {
611+
let mut external_src = self.external_src.borrow_mut();
612+
if let Some(src) = src {
613+
let mut hasher: StableHasher<u128> = StableHasher::new();
614+
hasher.write(src.as_bytes());
615+
616+
if hasher.finish() == self.src_hash {
617+
*external_src = ExternalSource::Present(src);
618+
return true;
619+
}
620+
} else {
621+
*external_src = ExternalSource::AbsentErr;
622+
}
623+
624+
false
625+
}
626+
607627
/// get a line from the list of pre-computed line-beginnings.
608628
/// line-number here is 0-based.
609629
pub fn get_line(&self, line_number: usize) -> Option<Cow<str>> {

0 commit comments

Comments
 (0)