(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:
@@ -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);
|
||||||
|
Reference in New Issue
Block a user