Committer  : entrope
CVSROOT    : /cvsroot/undernet-ircu
Module     : ircu2.10
Commit time: 2005-05-08 00:56:15 UTC

Modified files:
     ChangeLog ircd/numnicks.c ircd/test/ircd_in_addr_t.c

Log message:

Fix base64toip() bugs (PR#1197043).

---------------------- diff included ----------------------
Index: ircu2.10/ChangeLog
diff -u ircu2.10/ChangeLog:1.624 ircu2.10/ChangeLog:1.625
--- ircu2.10/ChangeLog:1.624    Thu May  5 20:42:24 2005
+++ ircu2.10/ChangeLog  Sat May  7 17:56:04 2005
@@ -1,3 +1,10 @@
+2005-05-07  Michael Poole <[EMAIL PROTECTED]>
+
+       * ircd/numnicks.c (base64toip): Fix bugs in parsing IPv6
+       addresses.
+       * ircd/test/ircd_in_addr_t.c (test_addrs): Add new entry.
+       (test_address): Test base64toip() as well.
+
 2005-05-05  Michael Poole <[EMAIL PROTECTED]>
 
        * ircd/s_user.c (umode_str): Only clear the operator flag when not
Index: ircu2.10/ircd/numnicks.c
diff -u ircu2.10/ircd/numnicks.c:1.29 ircu2.10/ircd/numnicks.c:1.30
--- ircu2.10/ircd/numnicks.c:1.29       Mon May  2 20:47:42 2005
+++ ircu2.10/ircd/numnicks.c    Sat May  7 17:56:05 2005
@@ -18,7 +18,7 @@
  */
 /** @file
  * @brief Implementation of numeric nickname operations.
- * @version $Id: numnicks.c,v 1.29 2005/05/03 03:47:42 entrope Exp $
+ * @version $Id: numnicks.c,v 1.30 2005/05/08 00:56:05 entrope Exp $
  */
 #include "config.h"
 
@@ -513,7 +513,7 @@
     do {
       if (*input == '_') {
         unsigned int left;
-        for (left = (25 - strlen(input)) / 3; left; left--)
+        for (left = (25 - strlen(input)) / 3 - pos; left; left--)
           addr->in6_16[pos++] = 0;
         input++;
       } else {
@@ -521,7 +521,6 @@
         accum = (accum << NUMNICKLOG) | convert2n[(unsigned char)*input++];
         accum = (accum << NUMNICKLOG) | convert2n[(unsigned char)*input++];
         addr->in6_16[pos++] = ntohs(accum);
-        input += 3;
       }
     } while (pos < 8);
   }
Index: ircu2.10/ircd/test/ircd_in_addr_t.c
diff -u ircu2.10/ircd/test/ircd_in_addr_t.c:1.2 
ircu2.10/ircd/test/ircd_in_addr_t.c:1.3
--- ircu2.10/ircd/test/ircd_in_addr_t.c:1.2     Wed Feb  9 19:25:40 2005
+++ ircu2.10/ircd/test/ircd_in_addr_t.c Sat May  7 17:56:05 2005
@@ -43,6 +43,9 @@
     { "8352:0344:0:0:0:0:2001:1204", "8352:344::2001:1204",
       {{ 0x8352, 0x344, 0, 0, 0, 0, 0x2001, 0x1204 }},
       "AAAAAA", "INSANE_CABBIE", 1, 0, 0 },
+    { "1:2:3:4:5:6:7:8", "1:2:3:4:5:6:7:8",
+      {{ 1, 2, 3, 4, 5, 6, 7, 8 }},
+      "AAAAAA", "AABAACAADAAEAAFAAGAAHAAI", 1, 0, 0 },
     { 0 },
 };
 
@@ -80,6 +83,15 @@
     assert(!!val == addr->is_ipv4);
     val = irc_in_addr_is_loopback(&parsed);
     assert(!!val == addr->is_loopback);
+    /* Check base64-to-IP conversion. */
+    if (addr->is_ipv4) {
+        base64toip(addr->base64_v4, &parsed);
+        assert(!memcmp(parsed.in6_16+6, addr->expected.in6_16+6, 4));
+    } else {
+        base64toip(addr->base64_v6, &parsed);
+        assert(!memcmp(&parsed, &addr->expected, sizeof(parsed)));
+    }
+    /* Tests completed. */
     printf("Passed: %s (%s/%s)\n", addr->text, base64_v4, base64_v6);
 }
 
----------------------- End of diff -----------------------
_______________________________________________
Patches mailing list
[email protected]
http://undernet.sbg.org/mailman/listinfo/patches

Reply via email to