• antirez's avatar
    ziplistFind(): don't assume that entries are comparable by encoding. · 8361d6c4
    antirez authored
    Because Redis 2.6 introduced new integer encodings it is no longer true
    that if two entries have a different encoding they are not equal.
    
    An old ziplist can be loaded from an RDB file generated with Redis 2.4,
    in this case for instance a small unsigned integers is encoded with a
    16 bit encoding, while in Redis 2.6 a more specific 8 bit encoding
    format is used.
    
    Because of this bug hashes ended with duplicated values or fields lookup
    failed, causing many bad behaviors.
    This in turn caused a crash while converting the ziplist encoded hash into
    a real hash table because an assertion was raised on duplicated elements.
    
    This commit fixes issue #547.
    
    Many thanks to Pinterest's Marty Weiner and colleagues for discovering
    the problem and helping us in the debugging process.
    8361d6c4
ziplist.c 48.9 KB