bool tainted)
{
uint8_t const *p = src;
+ uint8_t const *end = p + len;
size_t min, max;
min = fr_value_box_network_sizes[type][0];
* Already in network byte order
*/
case FR_TYPE_IPV4_ADDR:
- memset(&dst->vb_ip, 0, sizeof(dst->vb_ip));
- memcpy(&dst->vb_ip.addr.v4, src, len);
- dst->vb_ip.af = AF_INET;
- dst->vb_ip.prefix = 32;
- dst->vb_ip.scope_id = 0; /* init even if it's unused */
+ dst->vb_ip = (fr_ipaddr_t){
+ .af = AF_INET,
+ .prefix = 32,
+ };
+ memcpy(&dst->vb_ip.addr.v4, p, (end - p));
break;
case FR_TYPE_IPV4_PREFIX:
- memset(&dst->vb_ip, 0, sizeof(dst->vb_ip));
- dst->vb_ip.af = AF_INET;
- dst->vb_ip.prefix = *p++;
- memcpy(&dst->vb_ip.addr.v4, p, sizeof(dst->vb_ip.addr.v4));
- dst->vb_ip.scope_id = 0; /* init even if it's unused */
+ dst->vb_ip = (fr_ipaddr_t){
+ .af = AF_INET,
+ .prefix = *p++,
+ };
+ memcpy(&dst->vb_ip.addr.v4, p, (end - p));
break;
case FR_TYPE_IPV6_ADDR:
- memset(&dst->vb_ip, 0, sizeof(dst->vb_ip));
- dst->vb_ip.af = AF_INET6;
- dst->vb_ip.scope_id = len == max ? *p++ : 0; /* optional */
- memcpy(&dst->vb_ip.addr.v6, p, sizeof(dst->vb_ip.addr.v6));
- dst->vb_ip.prefix = 128;
+ dst->vb_ip = (fr_ipaddr_t){
+ .af = AF_INET6,
+ .scope_id = len == max ? *p++ : 0, /* optional */
+ .prefix = 128
+ };
+ memcpy(&dst->vb_ip.addr.v6, p, (end - p));
break;
case FR_TYPE_IPV6_PREFIX:
- memset(&dst->vb_ip, 0, sizeof(dst->vb_ip));
- dst->vb_ip.af = AF_INET6;
- dst->vb_ip.scope_id = len == max ? *p++ : 0; /* optional */
- dst->vb_ip.prefix = *p++;
- memcpy(&dst->vb_ip.addr.v6, p, sizeof(dst->vb_ip.addr.v6));
+ dst->vb_ip = (fr_ipaddr_t){
+ .af = AF_INET6,
+ .scope_id = len == max ? *p++ : 0,
+ .prefix = *p++
+ };
+ memcpy(&dst->vb_ip.addr.v6, p, (end - p));
break;
case FR_TYPE_BOOL: