From 5cafc1b0a22902eac7c6ce3fd1bba05fbd99c3a8 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Fri, 4 Jul 2025 20:08:35 +0200 Subject: [PATCH 1/8] Fix clippy warnings --- src/category.rs | 2 +- src/i18n.rs | 4 ++-- src/main.rs | 16 ++++++++-------- src/redirect.rs | 4 ++-- src/teams.rs | 6 +++--- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/category.rs b/src/category.rs index 52b7b00c2..174ce0610 100644 --- a/src/category.rs +++ b/src/category.rs @@ -31,7 +31,7 @@ impl<'r> FromParam<'r> for Category { if is_category(&url) { Ok(Category { name: url }) } else { - Err(format!("No category called <{}>", url)) + Err(format!("No category called <{url}>")) } } } diff --git a/src/i18n.rs b/src/i18n.rs index a2f8b5c24..3b2eb75cf 100644 --- a/src/i18n.rs +++ b/src/i18n.rs @@ -22,7 +22,7 @@ fn add_bundle_functions(bundle: &mut FluentBundle<&'static FluentResource>) { Some(FluentValue::String(s)) => s, _ => return FluentValue::None, }; - FluentValue::String(format!("{0}", email).into()) + FluentValue::String(format!("{email}").into()) }) .expect("could not add function"); @@ -32,7 +32,7 @@ fn add_bundle_functions(bundle: &mut FluentBundle<&'static FluentResource>) { Some(FluentValue::String(s)) => s, _ => return FluentValue::None, }; - FluentValue::String(format!("{0}", text).into()) + FluentValue::String(format!("{text}").into()) }) .expect("could not add function"); } diff --git a/src/main.rs b/src/main.rs index eaa8285ed..a7d5c270a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -125,7 +125,7 @@ fn baseurl(lang: &str) -> String { if lang == "en-US" { String::new() } else { - format!("/{}", lang) + format!("/{lang}") } } @@ -274,13 +274,13 @@ fn hash_css(css: &str) -> String { } fn compile_sass(filename: &str) -> String { - let scss_file = format!("./src/styles/{}.scss", filename); + let scss_file = format!("./src/styles/{filename}.scss"); let css = compile_file(&scss_file, Options::default()) .unwrap_or_else(|_| panic!("couldn't compile sass: {}", &scss_file)); let css_sha = format!("{}_{}", filename, hash_css(&css)); - let css_file = format!("./static/styles/{}.css", css_sha); + let css_file = format!("./static/styles/{css_sha}.css"); fs::write(&css_file, css.into_bytes()) .unwrap_or_else(|_| panic!("couldn't write css file: {}", &css_file)); @@ -291,7 +291,7 @@ fn compile_sass(filename: &str) -> String { fn concat_vendor_css(files: Vec<&str>) -> String { let mut concatted = String::new(); for filestem in files { - let vendor_path = format!("./static/styles/{}.css", filestem); + let vendor_path = format!("./static/styles/{filestem}.css"); let contents = fs::read_to_string(vendor_path).expect("couldn't read vendor css"); concatted.push_str(&contents); } @@ -307,7 +307,7 @@ fn concat_vendor_css(files: Vec<&str>) -> String { fn concat_app_js(files: Vec<&str>) -> String { let mut concatted = String::new(); for filestem in files { - let vendor_path = format!("./static/scripts/{}.js", filestem); + let vendor_path = format!("./static/scripts/{filestem}.js"); let contents = fs::read_to_string(vendor_path).expect("couldn't read app js"); concatted.push_str(&contents); } @@ -354,7 +354,7 @@ async fn render_governance( Ok(Template::render(page, context)) } Err(err) => { - eprintln!("error while loading the governance page: {}", err); + eprintln!("error while loading the governance page: {err}"); Err(Status::InternalServerError) } } @@ -377,7 +377,7 @@ async fn render_team( if err.is::() { Err(Status::NotFound) } else { - eprintln!("error while loading the team page: {}", err); + eprintln!("error while loading the team page: {err}"); Err(Status::InternalServerError) } } @@ -392,7 +392,7 @@ fn render_subject(category: Category, subject: &str, lang: String) -> Result Option { if let Some((_, dest)) = EXTERNAL_REDIRECTS.iter().find(|(src, _)| *src == path) { Some(Redirect::permanent(*dest)) } else if let Some((_, dest)) = PAGE_REDIRECTS.iter().find(|(src, _)| *src == path) { - let dest = format!("/{}", dest); + let dest = format!("/{dest}"); match locale { Locale::Present("en-US") | Locale::NotSpecified => Some(Redirect::permanent(dest)), - Locale::Present(locale) => Some(Redirect::permanent(format!("/{}{}", locale, dest))), + Locale::Present(locale) => Some(Redirect::permanent(format!("/{locale}{dest}"))), Locale::SpecifiedButMissing => Some(Redirect::temporary(dest)), } } else { diff --git a/src/teams.rs b/src/teams.rs index 23a9983f4..bc0c65f28 100644 --- a/src/teams.rs +++ b/src/teams.rs @@ -254,7 +254,7 @@ impl Cached for RustTeams { self.1 } async fn fetch() -> Result> { - let resp: Teams = reqwest::get(format!("{}/teams.json", BASE_URL)) + let resp: Teams = reqwest::get(format!("{BASE_URL}/teams.json")) .await? .error_for_status()? .json() @@ -332,8 +332,8 @@ mod tests { ], alumni: Vec::new(), website_data: Some(TeamWebsite { - name: format!("Team {}", name), - description: format!("Description of {}", name), + name: format!("Team {name}"), + description: format!("Description of {name}"), page: name.into(), email: None, repo: None, From f736d72c8ca26eca4ce4bf5412b60a39164ec799 Mon Sep 17 00:00:00 2001 From: Remo Senekowitsch Date: Fri, 4 Jul 2025 19:59:15 +0200 Subject: [PATCH 2/8] Fix title of footer logos --- templates/components/footer.html.hbs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/templates/components/footer.html.hbs b/templates/components/footer.html.hbs index b7b2817b5..38f1ac9cf 100644 --- a/templates/components/footer.html.hbs +++ b/templates/components/footer.html.hbs @@ -34,13 +34,13 @@

{{fluent "footer-social"}}

{{fluent + alt="{{fluent "mastodon"}}" title="{{fluent "mastodon"}}" /> {{fluent + src="/static/images/bluesky.svg" alt="{{fluent "bluesky"}}" title="{{fluent "bluesky"}}" /> {{fluent + src="/static/images/youtube.svg" alt="{{fluent "footer-alt-youtube"}}" title="YouTube" /> github logo + title="{{fluent "footer-github-alt"}}" />
From 4cb44cd71225cc70af17dbec19a6be52c012a7b6 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 28 Jul 2025 11:49:21 +0200 Subject: [PATCH 3/8] clarify which release branches are supported --- locales/core.ftl | 2 ++ locales/en-US/security.ftl | 9 +++++---- templates/policies/security.html.hbs | 4 ++-- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/locales/core.ftl b/locales/core.ftl index 1eca7b1a4..3a3645824 100644 --- a/locales/core.ftl +++ b/locales/core.ftl @@ -20,6 +20,8 @@ https://groups.google.com/forum/#!forum/rustlang-security-announcements -rust-security-announcements-mailing-list-href = https://groups.google.com/group/rustlang-security-announcements/subscribe +-rust-security-supported-channels-href = + https://doc.rust-lang.org/book/appendix-07-nightly-rust.html -rustlang-security-announcements-subscribe-anchor = rustlang-security-announcements+subscribe@googlegroups.com -distros-openwall-email-anchor = diff --git a/locales/en-US/security.ftl b/locales/en-US/security.ftl index d5f67bb63..92e00ad20 100644 --- a/locales/en-US/security.ftl +++ b/locales/en-US/security.ftl @@ -63,20 +63,21 @@ security-scope--2025-04 =

If you have doubts on whether something falls within our scope, please reach out and we will provide guidance.

security-disclosure-heading = Disclosure policy -security-disclosure-description = +security-disclosure-description--2025-07 =

The Rust project has a 5 step disclosure process.

  1. The security report is received and is assigned a primary handler. This person will coordinate the fix and release process.
  2. The problem is confirmed and a list of all affected versions is determined.
  3. Code is audited to find any potential similar problems.
  4. -
  5. Fixes are prepared for all releases which are still under maintenance. These fixes are not committed to the public repository but rather held locally pending the announcement.
  6. -
  7. On the embargo date, the Rust security mailing list is sent a copy of the announcement. The changes are pushed to the public repository and new builds are deployed to rust-lang.org. Within 6 hours of the mailing list being notified, a copy of the advisory will be published on the Rust blog.
  8. +
  9. Fixes are prepared for all supported release branches. These fixes are not committed to the public repository but rather held locally pending the announcement.
  10. +
  11. On the embargo date, the Rust security mailing list is sent a copy of the announcement. The changes are pushed to the public repository and the release process is started. Within 6 hours of the mailing list being notified, a copy of the advisory will be published on the Rust blog.

This process can take some time, especially when coordination is required with maintainers of other projects. Every effort will be made to handle the bug in as timely a manner as possible, however it’s important that we follow the release process above to ensure that the disclosure is handled in a consistent manner.

security-receiving-heading = Receiving security updates -security-receiving-description = +security-receiving-description--2025-07 =

The best way to receive all the security announcements is to subscribe to the Rust security announcements mailing list (alternatively by sending an email to { -rustlang-security-announcements-subscribe-anchor }). The mailing list is very low traffic, and it receives the public notifications the moment the embargo is lifted.

+

The Rust project only provides support and security updates for the most recent stable release and the latest releases in our beta and nightly channels. As Rust releases must be built in the public, we will begin the release process as soon as the embargo lifts, and a release blog post will be published once updated binaries are available for download.

We will announce vulnerabilities 72 hours before the embargo is lifted to { -distros-openwall-email-anchor }, so that Linux distributions can update their packages.

security-pgp-key-heading = Plaintext PGP key diff --git a/templates/policies/security.html.hbs b/templates/policies/security.html.hbs index 84e8600cf..7da2222cd 100644 --- a/templates/policies/security.html.hbs +++ b/templates/policies/security.html.hbs @@ -46,7 +46,7 @@

{{fluent "security-disclosure-heading"}}

- {{fluent "security-disclosure-description"}} + {{fluent "security-disclosure-description--2025-07"}} @@ -56,7 +56,7 @@

{{fluent "security-receiving-heading"}}

- {{fluent "security-receiving-description"}} + {{fluent "security-receiving-description--2025-07"}} From ceda3a0bf6948e303ad334d036063f8f2c8d625f Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 28 Jul 2025 11:52:22 +0200 Subject: [PATCH 4/8] clarify that distros@openwall is notified only when relevant --- locales/en-US/security.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en-US/security.ftl b/locales/en-US/security.ftl index 92e00ad20..5928ef78a 100644 --- a/locales/en-US/security.ftl +++ b/locales/en-US/security.ftl @@ -78,6 +78,6 @@ security-receiving-heading = Receiving security updates security-receiving-description--2025-07 =

The best way to receive all the security announcements is to subscribe to the Rust security announcements mailing list (alternatively by sending an email to { -rustlang-security-announcements-subscribe-anchor }). The mailing list is very low traffic, and it receives the public notifications the moment the embargo is lifted.

The Rust project only provides support and security updates for the most recent stable release and the latest releases in our beta and nightly channels. As Rust releases must be built in the public, we will begin the release process as soon as the embargo lifts, and a release blog post will be published once updated binaries are available for download.

-

We will announce vulnerabilities 72 hours before the embargo is lifted to { -distros-openwall-email-anchor }, so that Linux distributions can update their packages.

+

When a vulnerability affects software distributions, we will announce vulnerabilities 72 hours before the embargo is lifted to { -distros-openwall-email-anchor }, so that distributions can update their packages when the embargo lifts.

security-pgp-key-heading = Plaintext PGP key From 3a361d781d61287fc77728f10b7fe9251c248899 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 28 Jul 2025 11:55:49 +0200 Subject: [PATCH 5/8] clarify how fixes are nowadays handled --- locales/en-US/security.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locales/en-US/security.ftl b/locales/en-US/security.ftl index 5928ef78a..3fc6d4c85 100644 --- a/locales/en-US/security.ftl +++ b/locales/en-US/security.ftl @@ -67,9 +67,9 @@ security-disclosure-description--2025-07 =

The Rust project has a 5 step disclosure process.

  1. The security report is received and is assigned a primary handler. This person will coordinate the fix and release process.
  2. -
  3. The problem is confirmed and a list of all affected versions is determined.
  4. +
  5. The problem is confirmed, the affected versions are identified, and relevant domain experts from relevant Rust teams are involved.
  6. Code is audited to find any potential similar problems.
  7. -
  8. Fixes are prepared for all supported release branches. These fixes are not committed to the public repository but rather held locally pending the announcement.
  9. +
  10. Fixes are prepared for all supported release branches. These fixes are not committed to the public repository but rather held in private repositories pending the announcement. These fixes are reviewed privately using the same review process of public changes.
  11. On the embargo date, the Rust security mailing list is sent a copy of the announcement. The changes are pushed to the public repository and the release process is started. Within 6 hours of the mailing list being notified, a copy of the advisory will be published on the Rust blog.

This process can take some time, especially when coordination is required with maintainers of other projects. Every effort will be made to handle the bug in as timely a manner as possible, however it’s important that we follow the release process above to ensure that the disclosure is handled in a consistent manner.

From 1f1472b73be1eeeb0829d6b81ceeaa64cab6ff89 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 28 Jul 2025 12:11:34 +0200 Subject: [PATCH 6/8] the blog post is published immediately --- locales/en-US/security.ftl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locales/en-US/security.ftl b/locales/en-US/security.ftl index 3fc6d4c85..d28df07cb 100644 --- a/locales/en-US/security.ftl +++ b/locales/en-US/security.ftl @@ -70,7 +70,7 @@ security-disclosure-description--2025-07 =
  • The problem is confirmed, the affected versions are identified, and relevant domain experts from relevant Rust teams are involved.
  • Code is audited to find any potential similar problems.
  • Fixes are prepared for all supported release branches. These fixes are not committed to the public repository but rather held in private repositories pending the announcement. These fixes are reviewed privately using the same review process of public changes.
  • -
  • On the embargo date, the Rust security mailing list is sent a copy of the announcement. The changes are pushed to the public repository and the release process is started. Within 6 hours of the mailing list being notified, a copy of the advisory will be published on the Rust blog.
  • +
  • On the embargo date, a copy of the announcement is sent to the Rust security mailing list and posted on the Rust blog. The changes are pushed to the public repository and the release process is started.
  • This process can take some time, especially when coordination is required with maintainers of other projects. Every effort will be made to handle the bug in as timely a manner as possible, however it’s important that we follow the release process above to ensure that the disclosure is handled in a consistent manner.

    From 5a49db391784a1c7ce07f438e87bec0f28702768 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 28 Jul 2025 12:13:22 +0200 Subject: [PATCH 7/8] add details about cve --- locales/en-US/security.ftl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/locales/en-US/security.ftl b/locales/en-US/security.ftl index d28df07cb..55e91c680 100644 --- a/locales/en-US/security.ftl +++ b/locales/en-US/security.ftl @@ -69,8 +69,8 @@ security-disclosure-description--2025-07 =
  • The security report is received and is assigned a primary handler. This person will coordinate the fix and release process.
  • The problem is confirmed, the affected versions are identified, and relevant domain experts from relevant Rust teams are involved.
  • Code is audited to find any potential similar problems.
  • -
  • Fixes are prepared for all supported release branches. These fixes are not committed to the public repository but rather held in private repositories pending the announcement. These fixes are reviewed privately using the same review process of public changes.
  • -
  • On the embargo date, a copy of the announcement is sent to the Rust security mailing list and posted on the Rust blog. The changes are pushed to the public repository and the release process is started.
  • +
  • Fixes are prepared for all supported release branches, and a CVE number is reserved. These fixes are not committed to the public repository but rather held in private repositories pending the announcement. These fixes are reviewed privately using the same review process of public changes.
  • +
  • On the embargo date, a copy of the announcement is sent to the Rust security mailing list and posted on the Rust blog. The changes are pushed to the public repository and the release process is started. Within an hour, full details are published in the CVE database
  • This process can take some time, especially when coordination is required with maintainers of other projects. Every effort will be made to handle the bug in as timely a manner as possible, however it’s important that we follow the release process above to ensure that the disclosure is handled in a consistent manner.

    From 1cb758187a59ff56eb8649676c13e835904f44a6 Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 28 Jul 2025 12:16:59 +0200 Subject: [PATCH 8/8] stop sending us encrypted emails thx --- locales/core.ftl | 2 - locales/en-US/security.ftl | 8 +-- templates/policies/security.html.hbs | 87 +--------------------------- 3 files changed, 4 insertions(+), 93 deletions(-) diff --git a/locales/core.ftl b/locales/core.ftl index 3a3645824..50aad87cc 100644 --- a/locales/core.ftl +++ b/locales/core.ftl @@ -1,8 +1,6 @@ -security-at-rust-lang-org-anchor = { EMAIL("security@rust-lang.org") } -rust-security-team-key-href = /static/keys/rust-security-team-key.gpg.ascii --rust-pgp-key-mit-keyserver-href = - https://pgp.mit.edu/pks/lookup?op=vindex&search=0xEFB9860AE7520DAC" -wikipedia-rfpolicy-href = https://en.wikipedia.org/wiki/RFPolicy diff --git a/locales/en-US/security.ftl b/locales/en-US/security.ftl index 55e91c680..b45caf469 100644 --- a/locales/en-US/security.ftl +++ b/locales/en-US/security.ftl @@ -5,9 +5,9 @@ policies-security-page-title = Security policy security-reporting-heading = Reporting security-reporting-link = email { ENGLISH("security@rust-lang.org") } -security-reporting-description--2022-01 = +security-reporting-description--2025-07 =

    Safety is one of the core principles of Rust, and to that end, we would like to ensure that Rust has a secure implementation. Thank you for taking the time to responsibly disclose any issues you find.

    -

    All security bugs in the Rust distribution should be reported by email to { -security-at-rust-lang-org-anchor }. This list is delivered to a small security team. Your email will be acknowledged within 24 hours, and you’ll receive a more detailed response to your email within 48 hours indicating the next steps in handling your report. If you would like, you can encrypt your report using our public key. This key is also On MIT’s keyserver and reproduced below.

    +

    All security bugs in the Rust distribution should be reported by email to { -security-at-rust-lang-org-anchor }. This list is delivered to a small security team. Your email will be acknowledged within 24 hours, and you’ll receive a more detailed response to your email within 48 hours indicating the next steps in handling your report.

    This email address receives a large amount of spam, so be sure to use a descriptive subject line to avoid having your report be missed. After the initial reply to your report, the security team will endeavor to keep you informed of the progress being made towards a fix and full announcement. As recommended by RFPolicy, these updates will be sent at least every five days. In reality, this is more likely to be every 24-48 hours.

    If you have not received a reply to your email within 48 hours, or have not heard from the security team for the past five days, there are a few steps you can take (in order):

      @@ -76,8 +76,6 @@ security-disclosure-description--2025-07 = security-receiving-heading = Receiving security updates security-receiving-description--2025-07 = -

      The best way to receive all the security announcements is to subscribe to the Rust security announcements mailing list (alternatively by sending an email to { -rustlang-security-announcements-subscribe-anchor }). The mailing list is very low traffic, and it receives the public notifications the moment the embargo is lifted.

      +

      The best way to receive all the security announcements is to subscribe to the Rust security announcements mailing list (alternatively by sending an email to { -rustlang-security-announcements-subscribe-anchor }). The mailing list is very low traffic, and it receives the public notifications the moment the embargo is lifted. Announcements on the mailing list are signed with the Rust's security key.

      The Rust project only provides support and security updates for the most recent stable release and the latest releases in our beta and nightly channels. As Rust releases must be built in the public, we will begin the release process as soon as the embargo lifts, and a release blog post will be published once updated binaries are available for download.

      When a vulnerability affects software distributions, we will announce vulnerabilities 72 hours before the embargo is lifted to { -distros-openwall-email-anchor }, so that distributions can update their packages when the embargo lifts.

      - -security-pgp-key-heading = Plaintext PGP key diff --git a/templates/policies/security.html.hbs b/templates/policies/security.html.hbs index 7da2222cd..2c83ccf5e 100644 --- a/templates/policies/security.html.hbs +++ b/templates/policies/security.html.hbs @@ -25,7 +25,7 @@

      {{fluent "security-reporting-link"}}

      - {{fluent "security-reporting-description--2022-01"}} + {{fluent "security-reporting-description--2025-07"}}

      {{fluent "security-reporting-link"}}

      @@ -60,90 +60,5 @@ -
      -
      -
      -

      {{fluent "security-pgp-key-heading"}}

      -
      -
      -
      -----BEGIN PGP PUBLIC KEY BLOCK-----
      -Version: GnuPG v1
      -
      -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
      -u05l
      -=SPB7
      ------END PGP PUBLIC KEY BLOCK-----
      -
      -
      -
      - {{/inline}} {{~> (lookup this "parent")~}}