• Matt Stancliff's avatar
    Fix maxclients error handling · c138631c
    Matt Stancliff authored
    Everywhere in the Redis code base, maxclients is treated
    as an int with (int)maxclients or `maxclients = atoi(source)`,
    so let's make maxclients an int.
    
    This fixes a bug where someone could specify a negative maxclients
    on startup and it would work (as well as set maxclients very high)
    because:
    
        unsigned int maxclients;
        char *update = "-300";
        maxclients = atoi(update);
        if (maxclients < 1) goto fail;
    
    But, (maxclients < 1) can only catch the case when maxclients
    is exactly 0.  maxclients happily sets itself to -300, which isn't
    -300, but rather 4294966996, which isn't < 1, so... everything
    "worked."
    
    maxclients config parsing checks for the case of < 1, but maxclients
    CONFIG SET parsing was checking for case of < 0 (allowing
    maxclients to be set to 0).  CONFIG SET parsing is now updated to
    match config parsing of < 1.
    
    It's tempting to add a MINIMUM_CLIENTS define, but... I didn't.
    
    These changes were inspired by antirez#356, but this doesn't
    fix that issue.
    c138631c
redis.h 63.8 KB