sd-dhcp-client-id/duid: do not trigger assertion when invalid size is passed

The data may be from user input or file. We usually use assertion for
programming error. Hence, using assert is not a good choise there.

Preparation for later commits.
This commit is contained in:
Yu Watanabe 2024-01-11 16:53:42 +09:00
parent 25cbc42d93
commit cf9b425749
2 changed files with 15 additions and 6 deletions

View file

@ -51,7 +51,9 @@ int sd_dhcp_client_id_set(
assert_return(client_id, -EINVAL);
assert_return(data, -EINVAL);
assert_return(client_id_data_size_is_valid(data_size), -EINVAL);
if (!client_id_data_size_is_valid(data_size))
return -EINVAL;
client_id->id.type = type;
memcpy(client_id->id.data, data, data_size);
@ -67,10 +69,12 @@ int sd_dhcp_client_id_set_raw(
assert_return(client_id, -EINVAL);
assert_return(data, -EINVAL);
assert_return(client_id_size_is_valid(data_size), -EINVAL);
/* Unlike sd_dhcp_client_id_set(), this takes whole client ID including its type. */
if (!client_id_size_is_valid(data_size))
return -EINVAL;
memcpy(client_id->raw, data, data_size);
client_id->size = data_size;
@ -150,7 +154,6 @@ int sd_dhcp_client_id_to_string_from_raw(const void *data, size_t data_size, cha
int r;
assert_return(data, -EINVAL);
assert_return(client_id_size_is_valid(data_size), -EINVAL);
assert_return(ret, -EINVAL);
r = sd_dhcp_client_id_set_raw(&client_id, data, data_size);

View file

@ -71,7 +71,9 @@ int sd_dhcp_duid_set(
assert_return(duid, -EINVAL);
assert_return(data, -EINVAL);
assert_return(duid_data_size_is_valid(data_size), -EINVAL);
if (!duid_data_size_is_valid(data_size))
return -EINVAL;
unaligned_write_be16(&duid->duid.type, duid_type);
memcpy(duid->duid.data, data, data_size);
@ -87,10 +89,12 @@ int sd_dhcp_duid_set_raw(
assert_return(duid, -EINVAL);
assert_return(data, -EINVAL);
assert_return(duid_size_is_valid(data_size), -EINVAL);
/* Unlike sd_dhcp_duid_set(), this takes whole DUID including its type. */
if (!duid_size_is_valid(data_size))
return -EINVAL;
memcpy(duid->raw, data, data_size);
duid->size = data_size;
@ -209,9 +213,11 @@ int dhcp_duid_to_string_internal(uint16_t type, const void *data, size_t data_si
const char *t;
assert(data);
assert(duid_data_size_is_valid(data_size));
assert(ret);
if (!duid_data_size_is_valid(data_size))
return -EINVAL;
x = hexmem(data, data_size);
if (!x)
return -ENOMEM;