Handle case where v6stat.zero_pos == 0 correctly.

Reported by: Kurt Roeckx <kurt@roeckx.be>, Tobias Ginzler <ginzler@fgan.de> (Debian bug #506111)
This commit is contained in:
Dr. Stephen Henson 2008-12-07 23:58:44 +00:00
parent ae381fef5c
commit 1d4e879106

View 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;
}