Fix input and output bugs in P10 IPv6 addresses with zero elements.
authorMichael Poole <mdpoole@troilus.org>
Wed, 23 Sep 2009 15:26:33 +0000 (11:26 -0400)
committerMichael Poole <mdpoole@troilus.org>
Wed, 23 Sep 2009 15:26:33 +0000 (11:26 -0400)
src/proto-p10.c (irc_p10_pton): Avoid writing past the end of ip->in6.
  (irc_p10_ntop): Avoid writing past the end of output.

src/proto-p10.c

index 7254d4ad8ff37ce649661a6482065fdd30e0f4dd..bd8688509674e592601eeb7a4cf3708f7d1e81ab 100644 (file)
@@ -395,7 +395,7 @@ irc_p10_pton(irc_in_addr_t *ip, const char *input)
         do {
             if (*input == '_') {
                 unsigned int left;
-                for (left = (25 - strlen(input)) / 3; left; left--)
+                for (left = (25 - strlen(input)) / 3 - pos; left; left--)
                     ip->in6[pos++] = 0;
                 input++;
             } else {
@@ -446,6 +446,7 @@ irc_p10_ntop(char *output, const irc_in_addr_t *ip)
             } else {
                 inttobase64(output, ntohs(ip->in6[ii]), 3);
                 output += 3;
+                ii += 1;
             }
         }
         *output = '\0';