]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect: make int CIDRFromMask() work on big endian platforms
authorSascha Steinbiss <satta@debian.org>
Wed, 27 Apr 2022 18:09:50 +0000 (20:09 +0200)
committerJeff Lucovsky <jeff@lucovsky.org>
Tue, 24 May 2022 19:51:17 +0000 (15:51 -0400)
(cherry picked from commit 394356f73c026879672843fbb20b4de68a09d0ac)

src/util-cidr.c

index 06a0c30bc2143d859c90992cd8e80d65729987c5..bdab3063c2688b417417a38434f46bc36e443b1b 100644 (file)
  */
 int CIDRFromMask(uint32_t netmask)
 {
+    netmask = ntohl(netmask);
     if (netmask == 0) {
         return 0;
     }
-    int lead_1 = 0;
-    bool seen_0 = false;
-    for (int i = 0; i < 32; i++) {
-        if (!seen_0) {
-            if ((netmask & BIT_U32(i)) != 0) {
-                lead_1++;
-            } else {
-                seen_0 = true;
-            }
+    int p = 0;
+    bool seen_1 = false;
+    while (netmask > 0) {
+        if (netmask & 1) {
+            seen_1 = true;
+            p++;
         } else {
-            if ((netmask & BIT_U32(i)) != 0) {
+            if (seen_1) {
                 return -1;
             }
         }
+        netmask >>= 1;
     }
-    return lead_1;
+    return p;
 }
 
 uint32_t CIDRGet(int cidr)