Fix potential infinite loop introduced with r39961 and find by the buildbot. Fixes...
authorcmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 21 Nov 2011 02:01:59 +0000 (02:01 +0000)
committercmaynard <cmaynard@f5534014-38df-0310-8fa8-9805f1628bb7>
Mon, 21 Nov 2011 02:01:59 +0000 (02:01 +0000)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@39963 f5534014-38df-0310-8fa8-9805f1628bb7

epan/dissectors/packet-ip.c

index cfdd0a7e3d13abd1e6c11242f295db1cd5c19c1a..56533aabb36757eaacbc7683d09239119c8cffc3 100644 (file)
@@ -1293,16 +1293,18 @@ get_dst_offset(tvbuff_t *tvb, int offset, guint length,
         /* Bogus - option length is less than what it's supposed to be for
            this option. */
         return 0;
-      } else if (optp != NULL) {
-        if (opt == IPOPT_SSRR || opt == IPOPT_LSRR) {
-          /* Hmm, what if you have both options? */
-          guint8 ptr;
-
-          ptr = tvb_get_guint8(tvb, offset + 2);
-          if (ptr < 4 || (ptr & 3) || (ptr > len)) {
-            return 0;
+      } else {
+        if (optp != NULL) {
+          if (opt == IPOPT_SSRR || opt == IPOPT_LSRR) {
+            /* Hmm, what if you have both options? */
+            guint8 ptr;
+
+            ptr = tvb_get_guint8(tvb, offset + 2);
+            if (ptr < 4 || (ptr & 3) || (ptr > len)) {
+              return 0;
+            }
+            return (offset - orig_offset) + 4 + (len - 4);
           }
-          return (offset - orig_offset) + 4 + (len - 4);
         }
         len -= 2;   /* subtract size of type and length */
         offset += 2 + len;