Bump to libevent 2.1.8
[platform/upstream/libevent.git] / event_tagging.c
index a83e719..6459dfa 100644 (file)
  */
 
 #include "event2/event-config.h"
+#include "evconfig-private.h"
 
-#ifdef _EVENT_HAVE_SYS_TYPES_H
+#ifdef EVENT__HAVE_SYS_TYPES_H
 #include <sys/types.h>
 #endif
-#ifdef _EVENT_HAVE_SYS_PARAM_H
+#ifdef EVENT__HAVE_SYS_PARAM_H
 #include <sys/param.h>
 #endif
 
-#ifdef WIN32
+#ifdef _WIN32
 #define WIN32_LEAN_AND_MEAN
 #include <winsock2.h>
 #include <windows.h>
 #undef WIN32_LEAN_AND_MEAN
-#else
-#include <sys/ioctl.h>
 #endif
 
+#ifdef EVENT__HAVE_SYS_IOCTL_H
+#include <sys/ioctl.h>
+#endif
 #include <sys/queue.h>
-#ifdef _EVENT_HAVE_SYS_TIME_H
+#ifdef EVENT__HAVE_SYS_TIME_H
 #include <sys/time.h>
 #endif
 
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
-#ifndef WIN32
+#ifndef _WIN32
 #include <syslog.h>
 #endif
-#ifdef _EVENT_HAVE_UNISTD_H
+#ifdef EVENT__HAVE_UNISTD_H
 #include <unistd.h>
 #endif
 #include <limits.h>
@@ -206,10 +208,19 @@ decode_tag_internal(ev_uint32_t *ptag, struct evbuffer *evbuf, int dodrain)
         */
        data = evbuffer_pullup(
                evbuf, len < sizeof(number) + 1 ? len : sizeof(number) + 1);
+       if (!data)
+               return (-1);
 
        while (count++ < len) {
                ev_uint8_t lower = *data++;
-               number |= (lower & 0x7f) << shift;
+               if (shift >= 28) {
+                       /* Make sure it fits into 32 bits */
+                       if (shift > 28)
+                               return (-1);
+                       if ((lower & 0x7f) > 15)
+                               return (-1);
+               }
+               number |= (lower & (unsigned)0x7f) << shift;
                shift += 7;
 
                if (!(lower & 0x80)) {
@@ -312,6 +323,8 @@ do {                                                                        \
                                                                        \
        /* XXX(niels): faster? */                                       \
        data = evbuffer_pullup(evbuf, offset + 1) + offset;             \
+       if (!data)                                                      \
+               return (-1);                                            \
                                                                        \
        nibbles = ((data[0] & 0xf0) >> 4) + 1;                          \
        if (nibbles > maxnibbles || (nibbles >> 1) + 1 > len)           \
@@ -319,6 +332,8 @@ do {                                                                        \
        len = (nibbles >> 1) + 1;                                       \
                                                                        \
        data = evbuffer_pullup(evbuf, offset + len) + offset;           \
+       if (!data)                                                      \
+               return (-1);                                            \
                                                                        \
        while (nibbles > 0) {                                           \
                number <<= 4;                                           \