• Oran Agra's avatar
    Sanitize dump payload: ziplist, listpack, zipmap, intset, stream · ca1c1825
    Oran Agra authored
    When loading an encoded payload we will at least do a shallow validation to
    check that the size that's encoded in the payload matches the size of the
    allocation.
    This let's us later use this encoded size to make sure the various offsets
    inside encoded payload don't reach outside the allocation, if they do, we'll
    assert/panic, but at least we won't segfault or smear memory.
    
    We can also do 'deep' validation which runs on all the records of the encoded
    payload and validates that they don't contain invalid offsets. This lets us
    detect corruptions early and reject a RESTORE command rather than accepting
    it and asserting (crashing) later when accessing that payload via some command.
    
    configuration:
    - adding ACL flag skip-sanitize-payload
    - adding config sanitize-dump-payload [yes/no/clients]
    
    For now, we don't have a good way to ensure MIGRATE in cluster resharding isn't
    being slowed down by these sanitation, so i'm setting the default value to `no`,
    but later on it should be set to `clients` by default.
    
    changes:
    - changing rdbReportError not to `exit` in RESTORE command
    - adding a new stat to be able to later check if cluster MIGRATE isn't being
      slowed down by sanitation.
    ca1c1825
rdb.c 105 KB