(add_addrs): don't increase addr->len until in contains interesting

data, use right iteration counter when clearing the addresses


git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@12842 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Love Hörnquist Åstrand
2003-09-18 00:21:00 +00:00
parent 6e10f776c4
commit a453cdbddc

View File

@@ -41,7 +41,7 @@ add_addrs(krb5_context context,
struct addrinfo *ai) struct addrinfo *ai)
{ {
krb5_error_code ret; krb5_error_code ret;
unsigned n, i, j; unsigned n, i;
void *tmp; void *tmp;
struct addrinfo *a; struct addrinfo *a;
@@ -49,19 +49,18 @@ add_addrs(krb5_context context,
for (a = ai; a != NULL; a = a->ai_next) for (a = ai; a != NULL; a = a->ai_next)
++n; ++n;
i = addr->len; tmp = realloc(addr->val, (addr->len + n) * sizeof(*addr->val));
addr->len += n;
tmp = realloc(addr->val, addr->len * sizeof(*addr->val));
if (tmp == NULL) { if (tmp == NULL) {
krb5_set_error_string(context, "malloc: out of memory"); krb5_set_error_string(context, "malloc: out of memory");
ret = ENOMEM; ret = ENOMEM;
goto fail; goto fail;
} }
addr->val = tmp; addr->val = tmp;
for (j = i; j < addr->len; ++j) { for (i = addr->len; i < (addr->len + n); ++i) {
addr->val[i].addr_type = 0; addr->val[i].addr_type = 0;
krb5_data_zero(&addr->val[i].address); krb5_data_zero(&addr->val[i].address);
} }
i = addr->len;
for (a = ai; a != NULL; a = a->ai_next) { for (a = ai; a != NULL; a = a->ai_next) {
ret = krb5_sockaddr2address (context, a->ai_addr, &addr->val[i]); ret = krb5_sockaddr2address (context, a->ai_addr, &addr->val[i]);
if (ret == 0) if (ret == 0)
@@ -70,8 +69,8 @@ add_addrs(krb5_context context,
krb5_clear_error_string (context); krb5_clear_error_string (context);
else else
goto fail; goto fail;
addr->len = i;
} }
addr->len = i;
return 0; return 0;
fail: fail:
krb5_free_addresses (context, addr); krb5_free_addresses (context, addr);