Handle case where v6stat.zero_pos == 0 correctly.
authorDr. Stephen Henson <steve@openssl.org>
Sun, 7 Dec 2008 23:58:44 +0000 (23:58 +0000)
committerDr. Stephen Henson <steve@openssl.org>
Sun, 7 Dec 2008 23:58:44 +0000 (23:58 +0000)
Reported by: Kurt Roeckx <kurt@roeckx.be>, Tobias Ginzler <ginzler@fgan.de> (Debian bug #506111)

crypto/x509v3/v3_utl.c

index ba0a1c022db4edc16206285a15e20733dd33b355..1a866aaa83b24f9b9cb4dc0c630fa62a35e63de9 100644 (file)
@@ -739,17 +739,20 @@ static int ipv6_from_asc(unsigned char *v6, const char *in)
 
        /* Format result */
 
-       /* Copy initial part */
        if (v6stat.zero_pos > 0)
+               {
+               /* Copy initial part */
                memcpy(v6, v6stat.tmp, v6stat.zero_pos);
-       /* Zero middle */
-       if (v6stat.total != 16)
+               /* Zero middle */
                memset(v6 + v6stat.zero_pos, 0, 16 - v6stat.total);
-       /* Copy final part */
-       if (v6stat.total != v6stat.zero_pos)
-               memcpy(v6 + v6stat.zero_pos + 16 - v6stat.total,
-                       v6stat.tmp + v6stat.zero_pos,
-                       v6stat.total - v6stat.zero_pos);
+               /* Copy final part */
+               if (v6stat.total != v6stat.zero_pos)
+                       memcpy(v6 + v6stat.zero_pos + 16 - v6stat.total,
+                               v6stat.tmp + v6stat.zero_pos,
+                               v6stat.total - v6stat.zero_pos);
+               }
+       else
+               memcpy(v6, v6stat.tmp, 16);
 
        return 1;
        }