Ho appena scaricato le fonti per la compressione LZ4-HC e il controllo per la compatibilità a 64 bit.Il codice sorgente per la compressione LZ4 è compatibile con 64 bit?
I'am ottenere alcuni avvertimenti "di conversione da '__int64' a 'unsigned int', possibile perdita di dati"
Quando ho tenuto a scavare ho notato macro ADD_HASH (p). Ultima parte di quella macro è
HashTable[HASH_VALUE(p)] = (p) - base;
p - const BYTE*
base - const BYTE* const for 64-bit. (const int b - for 32-bit)
HTYPE HashTable[];
HTYPE is U32 for 64-bit platform (const BYTE* - for 32-bit)
Quello che sta accadendo su 32 bit - sottraiamo int const da un puntatore e la memorizzazione in un altro puntatore - abbastanza sicuro.
Ora 64: Mi sembra che sottrarre due puntatori su 64 e salvarli in U32 non sia affatto sicuro!
La mia comprensione del fatto che LZ4 è compatibile con 64 bit solo se è garantito che "p" e "base" non sono distanti ... e ora devo scavare più a fondo nella logica per verificarlo.
Mi sono perso qualcosa? Qualcuno ha controllato questa libreria per la piena compatibilità a 64 bit come affermava di essere? Qualche altro problema con il codice della biblioteca?