From b0c08c3c8cb71cd3222a5fdf709ddd7213894e53 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Nov 2025 07:27:20 +0000 Subject: [PATCH] Fix pk calculation for files between 512-1024 bytes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- pmocache/src/cache.rs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pmocache/src/cache.rs b/pmocache/src/cache.rs index 2fbe7705..d9fe6ff5 100755 --- a/pmocache/src/cache.rs +++ b/pmocache/src/cache.rs @@ -393,17 +393,17 @@ impl Cache { .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)