mirror of
https://github.com/freemkv/libfreemkv.git
synced 2026-10-07 18:13:10 +00:00
Security - Remove the unsafe Vec::set_len over recycled sector buffers — UB reachable from safe code (GHSA-j8ww-f5fg-9pmh, low). Uses Vec::resize; pooling unchanged. CI / tooling - clippy on stable with the MSRV single-sourced from Cargo.toml; cargo-deny dependency-audit gate with first-party git sources allowed (#15); audience-based comment-guard (#17). Docs - README (keydb ownership, BD-J parser count), drive-access transport/reset notes, mux timeline module-doc links.
43 lines
1.8 KiB
Markdown
43 lines
1.8 KiB
Markdown
# BDMV disc-library metadata (`bdmt.rs`)
|
|
|
|
Every commercial Blu-ray carries a disc-library metadata directory with one
|
|
XML file per shipped language. The schema is the Blu-ray "disc library
|
|
metadata" namespace (`urn:BDA:bdmv;disclibmeta`), conventionally prefixed
|
|
`di:`. Fields commonly present:
|
|
|
|
- `<di:title>` or `<di:name>` — the title string. Vendor practice varies
|
|
(Paramount discs tend to use `<di:name>`).
|
|
- `<di:description>` — optional synopsis (often absent on retail discs;
|
|
common on box sets and special editions).
|
|
- `<di:discNumber>` / `<di:numSets>` (or `<di:numberOfSets>`) — set position
|
|
for multi-disc releases.
|
|
|
|
This module is intentionally separate from the BD-J `StreamLabel` parsers
|
|
under `labels/*.rs`. The XML here is disc-level (title, description, set
|
|
position), not per-stream.
|
|
|
|
Real-world XML is irregular: missing description elements, multiple title
|
|
elements (first one wins), and occasional malformed content. Extraction is
|
|
best-effort — a malformed file is treated as "no metadata" (returns `None`
|
|
from the helper), and the caller can still get metadata from
|
|
sibling-language XML files.
|
|
|
|
## `MAX_BDMT_BYTES`
|
|
|
|
The size comes from attacker-controlled UDF metadata; real files are a few
|
|
KB, so 1 MiB is generous while preventing a crafted huge-size entry from
|
|
triggering an oversized allocation in `read_file`.
|
|
|
|
## `parse_bdmt_xml`
|
|
|
|
Title-element preference: `<di:name>` → `<di:title>` →
|
|
`<di:tableOfContents>/<di:titleName>` (first match wins, per the
|
|
authoring-tool conventions documented above).
|
|
|
|
## `looks_like_xml`
|
|
|
|
Rejects candidate description strings that are themselves XML fragments —
|
|
observed on a captured disc, where `<di:description>` contained
|
|
`<di:thumbnail href="…"/>` child elements and no actual prose. Surfacing
|
|
that raw to the JSON output is worse than dropping the field entirely.
|