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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user