Skip to content

Commit a27a914

Browse files
authored
Merge pull request #10096 from Turbo87/maximums
Inline `Maximums` struct
2 parents ec834ae + 9fdeaa6 commit a27a914

File tree

5 files changed

+16
-36
lines changed

5 files changed

+16
-36
lines changed

src/config/server.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ pub struct Server {
4141
pub session_key: cookie::Key,
4242
pub gh_client_id: ClientId,
4343
pub gh_client_secret: ClientSecret,
44-
pub max_upload_size: u64,
44+
pub max_upload_size: u32,
4545
pub max_unpack_size: u64,
4646
pub max_dependencies: usize,
4747
pub max_features: usize,

src/controllers/krate/publish.rs

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ use crate::rate_limiter::LimitedAction;
3737
use crate::schema::*;
3838
use crate::sql::canon_crate_name;
3939
use crate::util::errors::{bad_request, custom, internal, AppResult, BoxedAppError};
40-
use crate::util::Maximums;
4140
use crate::views::{
4241
EncodableCrate, EncodableCrateDependency, GoodCrate, PublishMetadata, PublishWarnings,
4342
};
@@ -142,18 +141,17 @@ pub async fn publish(app: AppState, req: Parts, body: Body) -> AppResult<Json<Go
142141
.check_rate_limit(auth.user().id, rate_limit_action, &mut conn)
143142
.await?;
144143

145-
let maximums = Maximums::new(
146-
existing_crate.as_ref().and_then(|c| c.max_upload_size),
147-
app.config.max_upload_size,
148-
app.config.max_unpack_size,
149-
);
144+
let max_upload_size = existing_crate
145+
.as_ref()
146+
.and_then(|c| c.max_upload_size())
147+
.unwrap_or(app.config.max_upload_size);
150148

151-
let tarball_bytes = read_tarball_bytes(&mut reader, maximums.max_upload_size as u32).await?;
149+
let tarball_bytes = read_tarball_bytes(&mut reader, max_upload_size).await?;
152150
let content_length = tarball_bytes.len() as u64;
153151

154152
let pkg_name = format!("{}-{}", &*metadata.name, &version_string);
155-
let tarball_info =
156-
process_tarball(&pkg_name, &*tarball_bytes, maximums.max_unpack_size).await?;
153+
let max_unpack_size = std::cmp::max(app.config.max_unpack_size, max_upload_size as u64);
154+
let tarball_info = process_tarball(&pkg_name, &*tarball_bytes, max_unpack_size).await?;
157155

158156
// `unwrap()` is safe here since `process_tarball()` validates that
159157
// we only accept manifests with a `package` section and without

src/models/krate.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ pub struct Crate {
5252
pub homepage: Option<String>,
5353
pub documentation: Option<String>,
5454
pub repository: Option<String>,
55-
pub max_upload_size: Option<i32>,
55+
max_upload_size: Option<i32>,
5656
pub max_features: Option<i16>,
5757
}
5858

@@ -156,6 +156,11 @@ impl<'a> NewCrate<'a> {
156156
}
157157

158158
impl Crate {
159+
pub fn max_upload_size(&self) -> Option<u32> {
160+
self.max_upload_size
161+
.and_then(|size| u32::try_from(size).ok())
162+
}
163+
159164
/// SQL filter based on whether the crate's name loosely matches the given
160165
/// string.
161166
///

src/tests/krate/publish/max_size.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ async fn tarball_between_default_axum_limit_and_max_upload_size() {
1212
let (app, _, _, token) = TestApp::full()
1313
.with_config(|config| {
1414
config.max_upload_size = max_upload_size;
15-
config.max_unpack_size = max_upload_size;
15+
config.max_unpack_size = max_upload_size as u64;
1616
})
1717
.with_token()
1818
.await;
@@ -65,7 +65,7 @@ async fn tarball_bigger_than_max_upload_size() {
6565
let (app, _, _, token) = TestApp::full()
6666
.with_config(|config| {
6767
config.max_upload_size = max_upload_size;
68-
config.max_unpack_size = max_upload_size;
68+
config.max_unpack_size = max_upload_size as u64;
6969
})
7070
.with_token()
7171
.await;

src/util.rs

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
use std::cmp;
2-
31
pub use self::bytes_request::BytesRequest;
42
pub use self::io_util::{read_fill, read_le_u32};
53
pub use self::request_helpers::*;
@@ -12,24 +10,3 @@ mod request_helpers;
1210
pub mod rfc3339;
1311
pub mod token;
1412
pub mod tracing;
15-
16-
#[derive(Debug, Copy, Clone)]
17-
pub struct Maximums {
18-
pub max_upload_size: u64,
19-
pub max_unpack_size: u64,
20-
}
21-
22-
impl Maximums {
23-
pub fn new(
24-
krate_max_upload: Option<i32>,
25-
app_max_upload: u64,
26-
app_max_unpack: u64,
27-
) -> Maximums {
28-
let max_upload_size = krate_max_upload.map(|m| m as u64).unwrap_or(app_max_upload);
29-
let max_unpack_size = cmp::max(app_max_unpack, max_upload_size);
30-
Maximums {
31-
max_upload_size,
32-
max_unpack_size,
33-
}
34-
}
35-
}

0 commit comments

Comments
 (0)