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