Fix pk calculation for files between 512-1024 bytes

Critical Bug Fixed:
Files between 512 and 1024 bytes (e.g., small images) were incorrectly
handled. The condition `header.len() > 512` would skip the first 512
bytes even for small files, using only a tiny portion for pk calculation.

Example Bug:
- PNG image of 700 bytes
- header.len() = 700
- 700 > 512 = TRUE
- Used &header[512..] = only 188 bytes (octets 512-700)
- SKIPPED important PNG header and image data!

Solution:
Changed condition from `> 512` to `>= 1024`:
- Files < 1024 bytes → use ALL content (correct for images)
- Files >= 1024 bytes → skip first 512 bytes (correct for FLAC)

Impact:
- pmocovers cache now works correctly with small images
- No more data loss for files between 512-1024 bytes
- FLAC behavior unchanged (still skips header correctly)
This commit is contained in:
Claude
2025-11-07 07:27:20 +00:00
parent 78004b0327
commit b0c08c3c8c

View File

@@ -393,17 +393,17 @@ impl<C: CacheConfig> Cache<C> {
.await
.map_err(|e| anyhow!("Failed to read header bytes: {}", e))?;
// 2. Calculer le pk en utilisant au plus les 512 derniers octets
// Ceci évite les collisions pour les fichiers avec headers identiques (ex: FLAC)
// tout en fonctionnant pour les petits fichiers (images < 512 octets)
// 2. Calculer le pk selon la taille du fichier
// - Fichiers >= 1024 octets (FLAC): skip header (512 premiers octets), utilise octets 512-1024
// - Fichiers < 1024 octets (images, petits fichiers): utilise TOUT le contenu
let pk = if let Some(explicit) = explicit_pk {
explicit
} else {
let pk_bytes = if header.len() > 512 {
// Fichier >= 512 octets: utiliser les octets 512-1024 (contenu audio pour FLAC)
let pk_bytes = if header.len() >= 1024 {
// Gros fichier (>= 1024 octets): skip les 512 premiers (header FLAC)
&header[512..]
} else {
// Petit fichier < 512 octets: utiliser tout le contenu
// Petit fichier (< 1024 octets): utiliser TOUT le contenu
&header[..]
};
crate::cache_trait::pk_from_content_header(pk_bytes)