Skip to content

Commit 13d6ccc

Browse files
committed
controllers::krate::publish: extract pkg_name from verify_tarball
Will make it easier to test.
1 parent 00667b8 commit 13d6ccc

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

src/controllers/krate/publish.rs

+4-9
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,8 @@ pub fn publish(req: &mut dyn RequestExt) -> EndpointResult {
193193
let mut tarball = Vec::new();
194194
LimitErrorReader::new(req.body(), maximums.max_upload_size).read_to_end(&mut tarball)?;
195195
let hex_cksum: String = Sha256::digest(&tarball).encode_hex();
196-
verify_tarball(&krate, vers, &tarball, maximums.max_unpack_size)?;
196+
let pkg_name = format!("{}-{}", krate.name, vers);
197+
verify_tarball(&pkg_name, &tarball, maximums.max_unpack_size)?;
197198

198199
let pkg_path_in_vcs = None;
199200

@@ -366,12 +367,7 @@ pub fn add_dependencies(
366367
Ok(git_deps)
367368
}
368369

369-
fn verify_tarball(
370-
krate: &Crate,
371-
vers: &semver::Version,
372-
tarball: &[u8],
373-
max_unpack: u64,
374-
) -> AppResult<()> {
370+
fn verify_tarball(pkg_name: &str, tarball: &[u8], max_unpack: u64) -> AppResult<()> {
375371
// All our data is currently encoded with gzip
376372
let decoder = GzDecoder::new(tarball);
377373

@@ -381,7 +377,6 @@ fn verify_tarball(
381377

382378
// Use this I/O object now to take a peek inside
383379
let mut archive = tar::Archive::new(decoder);
384-
let prefix = format!("{}-{}", krate.name, vers);
385380
for entry in archive.entries()? {
386381
let entry = entry.map_err(|err| {
387382
err.chain(cargo_err(
@@ -394,7 +389,7 @@ fn verify_tarball(
394389
// upload a tarball that contains both `foo-0.1.0/` source code as well
395390
// as `bar-0.1.0/` source code, and this could overwrite other crates in
396391
// the registry!
397-
if !entry.path()?.starts_with(&prefix) {
392+
if !entry.path()?.starts_with(&pkg_name) {
398393
return Err(cargo_err("invalid tarball uploaded"));
399394
}
400395

0 commit comments

Comments
 (0)