Skip to content

Support latest WoW clients: BLTE mode F frames and flexible MFST root header sizes#8

Merged
Xerrion merged 1 commit into
masterfrom
copilot/update-extractor-latest-versions
Jul 9, 2026
Merged

Support latest WoW clients: BLTE mode F frames and flexible MFST root header sizes#8
Xerrion merged 1 commit into
masterfrom
copilot/update-extractor-latest-versions

Conversation

Copilot AI commented Jul 9, 2026

Copy link
Copy Markdown
Contributor

Newer WoW client builds failed to extract because the library hard-rejected two things they now use: BLTE mode F blocks and root files whose MFST header isn't exactly 24 bytes.

BLTE mode F (recursive frames)

  • decode_block_with_keys previously returned InvalidFormat("recursive BLTE (mode F) not supported")
  • Mode F payloads are a complete nested BLTE stream; they are now decoded recursively via decode_blte_with_keys, propagating the TACT keystore so encrypted nested blocks also decrypt

Flexible MFST root header size

  • detect_format required header_size == 24 to recognize the 10.1.7+ MFST layout; any build extending the header would be misclassified as the pre-10.1.7 12-byte format and misparsed
  • The declared header_size field is now honored (sanity-checked to 12–1024 and within data bounds), with blocks starting at that offset
// Before: only header_size == 24 accepted
if field_at_4 == 24 && data.len() >= 24 { ... }

// After: honor the declared header size
if (12..=1024).contains(&field_at_4) && data.len() >= field_at_4 as usize {
    let header_size = field_at_4 as usize;
    ...
    Ok((format, header_size))
}

Unknown MFST versions (>2) still error with UnsupportedVersion rather than silently misparsing.

Tests and docs

  • New tests: mode-F raw/zlib round-trips, invalid nested payload, extended (32-byte) MFST header, unsupported-version error
  • Updated README and module docs to list mode F support

@Xerrion Xerrion marked this pull request as ready for review July 9, 2026 09:04
@Xerrion Xerrion merged commit ea50732 into master Jul 9, 2026
2 checks passed
@Xerrion Xerrion deleted the copilot/update-extractor-latest-versions branch July 9, 2026 09:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants