• M
    Fix maxclients error handling · 611372fa
    Matt Stancliff 提交于
    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.
    611372fa
config.c 75.0 KB