check return values from snprintf and clean up semantics of ret_len
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@14853 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -598,6 +598,8 @@ arange_print_addr (const krb5_address *addr, char *str, size_t len)
|
|||||||
size = l;
|
size = l;
|
||||||
|
|
||||||
ret = krb5_print_address (&a->low, str + size, len - size, &l);
|
ret = krb5_print_address (&a->low, str + size, len - size, &l);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
ret_len += l;
|
ret_len += l;
|
||||||
if (len - size > l)
|
if (len - size > l)
|
||||||
size += l;
|
size += l;
|
||||||
@@ -612,6 +614,8 @@ arange_print_addr (const krb5_address *addr, char *str, size_t len)
|
|||||||
size = len;
|
size = len;
|
||||||
|
|
||||||
ret = krb5_print_address (&a->high, str + size, len - size, &l);
|
ret = krb5_print_address (&a->high, str + size, len - size, &l);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
ret_len += l;
|
ret_len += l;
|
||||||
|
|
||||||
return ret_len;
|
return ret_len;
|
||||||
@@ -659,9 +663,10 @@ arange_order_addr(krb5_context context,
|
|||||||
static int
|
static int
|
||||||
addrport_print_addr (const krb5_address *addr, char *str, size_t len)
|
addrport_print_addr (const krb5_address *addr, char *str, size_t len)
|
||||||
{
|
{
|
||||||
|
krb5_error_code ret;
|
||||||
krb5_address addr1, addr2;
|
krb5_address addr1, addr2;
|
||||||
uint16_t port = 0;
|
uint16_t port = 0;
|
||||||
size_t ret_len = 0, l;
|
size_t ret_len = 0, l, size = 0;
|
||||||
krb5_storage *sp = krb5_storage_from_data((krb5_data*)&addr->address);
|
krb5_storage *sp = krb5_storage_from_data((krb5_data*)&addr->address);
|
||||||
/* for totally obscure reasons, these are not in network byteorder */
|
/* for totally obscure reasons, these are not in network byteorder */
|
||||||
krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_LE);
|
krb5_storage_set_byteorder(sp, KRB5_STORAGE_BYTEORDER_LE);
|
||||||
@@ -679,10 +684,24 @@ addrport_print_addr (const krb5_address *addr, char *str, size_t len)
|
|||||||
}
|
}
|
||||||
l = strlcpy(str, "ADDRPORT:", len);
|
l = strlcpy(str, "ADDRPORT:", len);
|
||||||
ret_len += l;
|
ret_len += l;
|
||||||
krb5_print_address(&addr1, str + ret_len, len - ret_len, &l);
|
if (len > l)
|
||||||
ret_len += l;
|
size += l;
|
||||||
l = snprintf(str + ret_len, len - ret_len, ",PORT=%u", port);
|
else
|
||||||
|
size = len;
|
||||||
|
|
||||||
|
ret = krb5_print_address(&addr1, str + size, len - size, &l);
|
||||||
|
if (ret)
|
||||||
|
return ret;
|
||||||
ret_len += l;
|
ret_len += l;
|
||||||
|
if (len - size > l)
|
||||||
|
size += l;
|
||||||
|
else
|
||||||
|
size = len;
|
||||||
|
|
||||||
|
ret = snprintf(str + size, len - size, ",PORT=%u", port);
|
||||||
|
if (ret < 0)
|
||||||
|
return EINVAL;
|
||||||
|
ret_len += ret;
|
||||||
return ret_len;
|
return ret_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -866,8 +885,8 @@ krb5_error_code KRB5_LIB_FUNCTION
|
|||||||
krb5_print_address (const krb5_address *addr,
|
krb5_print_address (const krb5_address *addr,
|
||||||
char *str, size_t len, size_t *ret_len)
|
char *str, size_t len, size_t *ret_len)
|
||||||
{
|
{
|
||||||
size_t ret;
|
|
||||||
struct addr_operations *a = find_atype(addr->addr_type);
|
struct addr_operations *a = find_atype(addr->addr_type);
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (a == NULL || a->print_addr == NULL) {
|
if (a == NULL || a->print_addr == NULL) {
|
||||||
char *s;
|
char *s;
|
||||||
@@ -892,6 +911,8 @@ krb5_print_address (const krb5_address *addr,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
ret = (*a->print_addr)(addr, str, len);
|
ret = (*a->print_addr)(addr, str, len);
|
||||||
|
if (ret < 0)
|
||||||
|
return EINVAL;
|
||||||
if(ret_len != NULL)
|
if(ret_len != NULL)
|
||||||
*ret_len = ret;
|
*ret_len = ret;
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user