Skip to content

Commit bff48ce

Browse files
committed
Limit crate names to 64 characters. Fixes #696.
1 parent a300575 commit bff48ce

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

src/krate.rs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,8 @@ pub const ALL_COLUMNS: AllColumns = (crates::id, crates::name,
6767
crates::readme, crates::license, crates::repository,
6868
crates::max_upload_size);
6969

70+
pub const MAX_NAME_LENGTH: usize = 64;
71+
7072
type CrateQuery<'a> = crates::BoxedQuery<'a, Pg, <AllColumns as Expression>::SqlType>;
7173

7274
#[derive(RustcEncodable, RustcDecodable)]
@@ -370,7 +372,10 @@ impl Crate {
370372
}
371373

372374
pub fn valid_name(name: &str) -> bool {
373-
Crate::valid_ident(name)
375+
let under_max_length = name.chars()
376+
.take(MAX_NAME_LENGTH + 1)
377+
.count() <= MAX_NAME_LENGTH;
378+
Crate::valid_ident(name) && under_max_length
374379
}
375380

376381
fn valid_ident(name: &str) -> bool {

src/tests/krate.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ use cargo_registry::dependency::EncodableDependency;
1414
use cargo_registry::download::EncodableVersionDownload;
1515
use cargo_registry::git;
1616
use cargo_registry::keyword::{Keyword, EncodableKeyword};
17-
use cargo_registry::krate::{Crate, EncodableCrate};
17+
use cargo_registry::krate::{Crate, EncodableCrate, MAX_NAME_LENGTH};
1818
use cargo_registry::upload as u;
1919
use cargo_registry::user::EncodableUser;
2020
use cargo_registry::version::EncodableVersion;
@@ -404,6 +404,7 @@ fn new_bad_names() {
404404

405405
bad_name("");
406406
bad_name("foo bar");
407+
bad_name(&"a".repeat(MAX_NAME_LENGTH + 1));
407408
}
408409

409410
#[test]

0 commit comments

Comments
 (0)