]> git.ipfire.org Git - thirdparty/cups.git/commitdiff
Add length checks to avoid pointer wraparound (Issue #431)
authorMichael R Sweet <michael.r.sweet@gmail.com>
Wed, 20 Jul 2022 02:00:12 +0000 (22:00 -0400)
committerMichael R Sweet <michael.r.sweet@gmail.com>
Wed, 20 Jul 2022 02:00:12 +0000 (22:00 -0400)
cups/snmp.c

index f2e0ee1bbd1f4a05aed5e2c61639d01fd5fa7db3..a53efe7b1dff6d55f97888cddbfdbb771ed3011f 100644 (file)
@@ -1239,7 +1239,11 @@ asn1_get_integer(
 
   if (length > sizeof(int))
   {
-    (*buffer) += length;
+    if (length > (unsigned)(bufend - *buffer))
+      *buffer = bufend;
+    else
+      (*buffer) += length;
+
     return (0);
   }
 
@@ -1275,7 +1279,11 @@ asn1_get_length(unsigned char **buffer,  /* IO - Pointer in buffer */
 
     if ((count = length & 127) > sizeof(unsigned))
     {
-      (*buffer) += count;
+      if (count > (bufend - *buffer))
+       *buffer = bufend;
+      else
+       (*buffer) += count;
+
       return (0);
     }
 
@@ -1308,7 +1316,14 @@ asn1_get_oid(
 
 
   if (*buffer >= bufend)
+  {
     return (0);
+  }
+  else if (length > (unsigned)(bufend - *buffer))
+  {
+    *buffer = bufend;
+    return (0);
+  }
 
   valend = *buffer + length;
   oidptr = oid;