Skip to content

Commit

Permalink
fix(sourcebundles): Only accept UTF-8 files
Browse files Browse the repository at this point in the history
  • Loading branch information
loewenheim committed Oct 4, 2023
1 parent 8528070 commit 5714290
Showing 1 changed file with 14 additions and 1 deletion.
15 changes: 14 additions & 1 deletion symbolic-debuginfo/src/sourcebundle.rs
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,9 @@ pub enum SourceBundleErrorKind {

/// Generic error when writing a source bundle, most likely IO.
WriteFailed,

/// The file is not valid UTF-8 or could not be read for another reason.
ReadFailed,
}

impl fmt::Display for SourceBundleErrorKind {
Expand All @@ -105,6 +108,7 @@ impl fmt::Display for SourceBundleErrorKind {
Self::BadManifest => write!(f, "failed to read/write source bundle manifest"),
Self::BadDebugFile => write!(f, "malformed debug info file"),
Self::WriteFailed => write!(f, "failed to write source bundle"),
Self::ReadFailed => write!(f, "file could not be read as UTF-8"),
}
}
}
Expand Down Expand Up @@ -1154,6 +1158,8 @@ where

/// Adds a file and its info to the bundle.
///
/// Only files containing valid UTF-8 are accepted.
///
/// Multiple files can be added at the same path. For the first duplicate, a counter will be
/// appended to the file name. Any subsequent duplicate increases that counter. For example:
///
Expand Down Expand Up @@ -1185,13 +1191,20 @@ where
S: AsRef<str>,
R: Read,
{
let mut buf = String::new();

if let Err(e) = file.read_to_string(&mut buf) {
return Err(SourceBundleError::new(SourceBundleErrorKind::ReadFailed, e));
}

let full_path = self.file_path(path.as_ref());
let unique_path = self.unique_path(full_path);

self.writer
.start_file(unique_path.clone(), default_file_options())
.map_err(|e| SourceBundleError::new(SourceBundleErrorKind::WriteFailed, e))?;
std::io::copy(&mut file, &mut self.writer)
self.writer
.write_all(buf.as_bytes())
.map_err(|e| SourceBundleError::new(SourceBundleErrorKind::WriteFailed, e))?;

self.manifest.files.insert(unique_path, info);
Expand Down

0 comments on commit 5714290

Please sign in to comment.