mirror of
https://github.com/freemkv/freemkv-keysources.git
synced 2026-10-07 18:13:11 +00:00
Sweep the pinned toolchain to Rust 1.97
The Windows UI needs current winsafe, whose real minimum is 1.89 (its manifest under-declares 1.87 while it uses NonNull::from_ref). Rather than stop at the minimum, this goes to current stable and fixes what that costs. The counter-intuitive result: 1.97 is CHEAPER than 1.89. libfreemkv had 54 clippy errors at 1.89 and 6 at 1.97, because clippy tightened the noisy collapsible_if lint in between. Stopping at the minimum would have been the most expensive choice available. Roughly 47 lints across the eight repos, the large majority auto-fixed: libfreemkv 6, freemkv-engine 14, bdemu 8, freemkv-keysources 7, autorip 6, freemkv-unlock 3, freemkv-i18n 3. The hand-fixed ones are a descending sort to sort_by_key(Reverse), four manual checked-division sites, a loop counter replaced by enumerate, and a loop whose first let-else became a while-let. Worth recording for whoever bumps next: clippy is MSRV-AWARE. Those 54 lints only appear once the crate DECLARES 1.89 or later, because let-chains become available. A bare `cargo +1.89 clippy` against a manifest still pinned at 1.87 reports clean and is meaningless — gate with the real precommit script, which is also the only thing that covers build scripts. The pin still sits below the Mac default, so it keeps doing its job: catching lint drift locally before CI sees it.
This commit is contained in:
@@ -13,7 +13,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: dtolnay/rust-toolchain@1.87.0
|
- uses: dtolnay/rust-toolchain@1.97.0
|
||||||
with:
|
with:
|
||||||
components: clippy, rustfmt
|
components: clippy, rustfmt
|
||||||
# Cache ~/.cargo/registry + target/ across runs. Saves ~30-60s
|
# Cache ~/.cargo/registry + target/ across runs. Saves ~30-60s
|
||||||
@@ -29,7 +29,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: dtolnay/rust-toolchain@1.87.0
|
- uses: dtolnay/rust-toolchain@1.97.0
|
||||||
- uses: Swatinem/rust-cache@v2
|
- uses: Swatinem/rust-cache@v2
|
||||||
with:
|
with:
|
||||||
shared-key: freemkv-keysources-ci
|
shared-key: freemkv-keysources-ci
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v5
|
- uses: actions/checkout@v5
|
||||||
- uses: dtolnay/rust-toolchain@1.87.0
|
- uses: dtolnay/rust-toolchain@1.97.0
|
||||||
- uses: Swatinem/rust-cache@v2
|
- uses: Swatinem/rust-cache@v2
|
||||||
- run: cargo test
|
- run: cargo test
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
name = "freemkv-keysources"
|
name = "freemkv-keysources"
|
||||||
version = "1.6.0"
|
version = "1.6.0"
|
||||||
edition = "2024"
|
edition = "2024"
|
||||||
rust-version = "1.87"
|
rust-version = "1.97"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
description = "Pluggable AACS key sources (keydb, online key service) for libfreemkv. Each source looks a disc up and hands libfreemkv its terminal Unit Keys via get_unit_keys; the library does all derivation."
|
description = "Pluggable AACS key sources (keydb, online key service) for libfreemkv. Each source looks a disc up and hands libfreemkv its terminal Unit Keys via get_unit_keys; the library does all derivation."
|
||||||
repository = "https://github.com/freemkv/freemkv-keysources"
|
repository = "https://github.com/freemkv/freemkv-keysources"
|
||||||
|
|||||||
+11
-14
@@ -698,22 +698,19 @@ impl KeyDb {
|
|||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
"U" => {
|
"U" if i + 1 < parts.len() => {
|
||||||
if i + 1 < parts.len() {
|
// Unit keys: "1-0xKEY" or "1-0xKEY ; comment"
|
||||||
// Unit keys: "1-0xKEY" or "1-0xKEY ; comment"
|
let uk_str = parts[i + 1].split(';').next().unwrap_or("").trim();
|
||||||
let uk_str = parts[i + 1].split(';').next().unwrap_or("").trim();
|
for uk in uk_str.split(' ') {
|
||||||
for uk in uk_str.split(' ') {
|
let uk = uk.trim();
|
||||||
let uk = uk.trim();
|
if let Some((num, key)) = uk.split_once('-')
|
||||||
if let Some((num, key)) = uk.split_once('-') {
|
&& let Ok(n) = num.parse::<u32>()
|
||||||
if let Ok(n) = num.parse::<u32>() {
|
&& let Some(k) = parse_hex16(key)
|
||||||
if let Some(k) = parse_hex16(key) {
|
{
|
||||||
unit_keys.push((n, k));
|
unit_keys.push((n, k));
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
i += 1;
|
|
||||||
}
|
}
|
||||||
|
i += 1;
|
||||||
}
|
}
|
||||||
_ => {}
|
_ => {}
|
||||||
}
|
}
|
||||||
|
|||||||
+8
-8
@@ -78,10 +78,10 @@ impl KeySource for MultiSource {
|
|||||||
/// the chain). All sources exhausted → empty.
|
/// the chain). All sources exhausted → empty.
|
||||||
fn get_unit_keys(&self, ctx: &dyn ResolveCtx) -> Result<Vec<UnitKey>, libfreemkv::Error> {
|
fn get_unit_keys(&self, ctx: &dyn ResolveCtx) -> Result<Vec<UnitKey>, libfreemkv::Error> {
|
||||||
for s in &self.sources {
|
for s in &self.sources {
|
||||||
if let Ok(uks) = s.get_unit_keys(ctx) {
|
if let Ok(uks) = s.get_unit_keys(ctx)
|
||||||
if !uks.is_empty() {
|
&& !uks.is_empty()
|
||||||
return Ok(uks);
|
{
|
||||||
}
|
return Ok(uks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Vec::new())
|
Ok(Vec::new())
|
||||||
@@ -93,10 +93,10 @@ impl KeySource for MultiSource {
|
|||||||
/// is skipped; on today's discs the online source answers.
|
/// is skipped; on today's discs the online source answers.
|
||||||
fn get_fmts_indexes(&self, ctx: &dyn ResolveCtx) -> Result<Vec<UnitKey>, libfreemkv::Error> {
|
fn get_fmts_indexes(&self, ctx: &dyn ResolveCtx) -> Result<Vec<UnitKey>, libfreemkv::Error> {
|
||||||
for s in &self.sources {
|
for s in &self.sources {
|
||||||
if let Ok(uks) = s.get_fmts_indexes(ctx) {
|
if let Ok(uks) = s.get_fmts_indexes(ctx)
|
||||||
if !uks.is_empty() {
|
&& !uks.is_empty()
|
||||||
return Ok(uks);
|
{
|
||||||
}
|
return Ok(uks);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Ok(Vec::new())
|
Ok(Vec::new())
|
||||||
|
|||||||
+4
-4
@@ -292,10 +292,10 @@ impl OnlineSource {
|
|||||||
);
|
);
|
||||||
// The disc's own title (UDF/ISO volume id), plain text. The key service
|
// The disc's own title (UDF/ISO volume id), plain text. The key service
|
||||||
// catalogs it by disc_hash (its disc-titles.json) — independent of keydb.
|
// catalogs it by disc_hash (its disc-titles.json) — independent of keydb.
|
||||||
if let Some(label) = ctx.title().map(str::trim) {
|
if let Some(label) = ctx.title().map(str::trim)
|
||||||
if !label.is_empty() {
|
&& !label.is_empty()
|
||||||
body["title"] = serde_json::Value::String(label.to_string());
|
{
|
||||||
}
|
body["title"] = serde_json::Value::String(label.to_string());
|
||||||
}
|
}
|
||||||
// Resolve + SSRF-guard the host just before the POST; pin the
|
// Resolve + SSRF-guard the host just before the POST; pin the
|
||||||
// validated addresses into a redirect-disabled agent so a DNS
|
// validated addresses into a redirect-disabled agent so a DNS
|
||||||
|
|||||||
Reference in New Issue
Block a user