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