• Binbin's avatar
    Fix set with duplicate elements causes sdiff to hang (#11530) · 3f8756a0
    Binbin authored
    
    
    This payload produces a set with duplicate elements (listpack encoding):
    ```
    restore _key 0 "\x14\x25\x25\x00\x00\x00\x0A\x00\x06\x01\x82\x5F\x35\x03\x04\x01\x82\x5F\x31\x03\x82\x5F\x33\x03\x00\x01\x82\x5F\x39\x03\x82\x5F\x33\x03\x08\x01\x02\x01\xFF\x0B\x00\x31\xBE\x7D\x41\x01\x03\x5B\xEC"
    
    smembers key
    1) "6"
    2) "_5"
    3) "4"
    4) "_1"
    5) "_3"  ---> dup
    6) "0"
    7) "_9"
    8) "_3"  ---> dup
    9) "8"
    10) "2"
    ```
    
    This kind of sets will cause SDIFF to hang, SDIFF generated a broken
    protocol and left the client hung. (Expected ten elements, but only
    got nine elements due to the duplication.)
    
    If we set `sanitize-dump-payload` to yes, we will be able to find
    the duplicate elements and report "ERR Bad data format".
    
    Discovered and discussed in #11290.
    
    This PR also improve prints when corrupt-dump-fuzzer hangs, it will
    print the cmds and the payload, an example like:
    ```
    Testing integration/corrupt-dump-fuzzer
    [TIMEOUT]: clients state report follows.
    sock6 => (SPAWNED SERVER) pid:28884
    Killing still running Redis server 28884
    commands caused test to hang:
    SDIFF __key 
    payload that caused test to hang: "\x14\balabala"
    ```
    Co-authored-by: default avatarOran Agra <oran@redislabs.com>
    3f8756a0
corrupt-dump.tcl 58.7 KB