LZ4-HC圧縮のソースをダウンロードし、64ビットの互換性を確認しました。
「'__int64'から'unsignedint'への変換、データが失われる可能性がある」という警告がほとんど表示されません。
掘り続けてみると、マクロADD_HASH(p)に気づきました。そのマクロの最後の部分は
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)
32ビットで何が起こっているか-ポインタからconstintを減算し、別のポインタに格納する-十分に安全です。
現在64:64で2つのポインターを減算し、それらをU32に保存することは、まったく安全ではないように思われます。
LZ4が64ビット互換であるという私の理解は、「p」と「base」がそれほど離れていないことが保証されている場合にのみ...そして今、それをチェックするためにロジックを深く掘り下げる必要があります。
私は何かを逃しましたか?誰かがこのライブラリをチェックして、64ビットの完全な互換性を確認しましたか?ライブラリのコードに関する他の既知の問題はありますか?