cstr += pvariant;
clen -= pvariant;
- if (hasnext && strncasecmp(cstr,"subscribe\r\n",11) == 0) {
+ if (hasnext && clen >= 11 && strncasecmp(cstr,"subscribe\r\n",11) == 0) {
c->flags |= REDIS_SUBSCRIBED;
/* Add every channel/pattern to the list of subscription callbacks. */
if (ret == 0) sdsfree(sname);
}
- } else if (strncasecmp(cstr,"unsubscribe\r\n",13) == 0) {
+ } else if (clen >= 13 && strncasecmp(cstr,"unsubscribe\r\n",13) == 0) {
/* It is only useful to call (P)UNSUBSCRIBE when the context is
* subscribed to one or more channels or patterns. */
if (!(c->flags & REDIS_SUBSCRIBED)) return REDIS_ERR;
/* (P)UNSUBSCRIBE does not have its own response: every channel or
* pattern that is unsubscribed will receive a message. This means we
* should not append a callback function for this command. */
- } else if(strncasecmp(cstr,"monitor\r\n",9) == 0) {
+ } else if(clen >= 9 && strncasecmp(cstr,"monitor\r\n",9) == 0) {
/* Set monitor flag and push callback */
c->flags |= REDIS_MONITORING;
__redisPushCallback(&ac->replies,&cb);