]> source.dussan.org Git - rspamd.git/commitdiff
[Minor] Fix another hiredis issue with uninitialized access
authorVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 12 Jun 2017 09:42:44 +0000 (10:42 +0100)
committerVsevolod Stakhov <vsevolod@highsecure.ru>
Mon, 12 Jun 2017 09:44:51 +0000 (10:44 +0100)
contrib/hiredis/async.c

index 342b4838a6fe1672cee9f25dbdeb6e585b277cc1..a508036e6ec87cdab99de44e3d12f0ef3665cc4a 100644 (file)
@@ -608,7 +608,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
     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. */
@@ -621,7 +621,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
 
             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;
@@ -629,7 +629,7 @@ static int __redisAsyncCommand(redisAsyncContext *ac, redisCallbackFn *fn, void
         /* (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);