Skip to content

Commit dba9aab

Browse files
committed
controllers::krate::publish: extract pkg_name from verify_tarball
Will make it easier to test.
1 parent 5da5717 commit dba9aab

File tree

1 file changed

+4
-9
lines changed

1 file changed

+4
-9
lines changed

src/controllers/krate/publish.rs

Lines changed: 4 additions & 9 deletions
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
if let Some(readme) = new_crate.readme {
199200
render::render_and_upload_readme(
@@ -363,12 +364,7 @@ pub fn add_dependencies(
363364
Ok(git_deps)
364365
}
365366

366-
fn verify_tarball(
367-
krate: &Crate,
368-
vers: &semver::Version,
369-
tarball: &[u8],
370-
max_unpack: u64,
371-
) -> AppResult<()> {
367+
fn verify_tarball(pkg_name: &str, tarball: &[u8], max_unpack: u64) -> AppResult<()> {
372368
// All our data is currently encoded with gzip
373369
let decoder = GzDecoder::new(tarball);
374370

@@ -378,7 +374,6 @@ fn verify_tarball(
378374

379375
// Use this I/O object now to take a peek inside
380376
let mut archive = tar::Archive::new(decoder);
381-
let prefix = format!("{}-{}", krate.name, vers);
382377
for entry in archive.entries()? {
383378
let entry = entry.map_err(|err| {
384379
err.chain(cargo_err(
@@ -391,7 +386,7 @@ fn verify_tarball(
391386
// upload a tarball that contains both `foo-0.1.0/` source code as well
392387
// as `bar-0.1.0/` source code, and this could overwrite other crates in
393388
// the registry!
394-
if !entry.path()?.starts_with(&prefix) {
389+
if !entry.path()?.starts_with(&pkg_name) {
395390
return Err(cargo_err("invalid tarball uploaded"));
396391
}
397392

0 commit comments

Comments
 (0)