From: Arran Cudbard-Bell Date: Wed, 14 Dec 2022 23:39:18 +0000 (-0600) Subject: Only use vb_length for variable sized values X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=855ba515bc127b45398ba0e437530c7019d4a1fb;p=thirdparty%2Ffreeradius-server.git Only use vb_length for variable sized values --- diff --git a/src/lib/util/value.c b/src/lib/util/value.c index 4415fc3638d..ebb0570c9b0 100644 --- a/src/lib/util/value.c +++ b/src/lib/util/value.c @@ -1233,8 +1233,7 @@ size_t fr_value_box_network_length(fr_value_box_t const *value) case FR_TYPE_DATE: case FR_TYPE_TIME_DELTA: if (value->enumv) return value->enumv->flags.length; - - return value->vb_length; + FALL_THROUGH; default: return network_min_size(value->type); @@ -1975,7 +1974,7 @@ int fr_value_box_to_key(uint8_t **out, size_t *outlen, fr_value_box_t const *val break; case FR_TYPE_INTEGER_EXCEPT_BOOL: - if (*outlen < (value->vb_length * 8)) return -1; + if (*outlen < (fr_value_box_network_sizes[value->type][1] * 8)) return -1; /* * Integers are put into network byte order. @@ -4551,7 +4550,6 @@ ssize_t fr_value_box_from_substr(TALLOC_CTX *ctx, fr_value_box_t *dst, static fr_sbuff_parse_rules_t default_rules; fr_sbuff_t *unescaped = NULL; fr_sbuff_t our_in = FR_SBUFF(in); - ssize_t ret; char buffer[256]; fr_slen_t slen; @@ -4559,11 +4557,6 @@ ssize_t fr_value_box_from_substr(TALLOC_CTX *ctx, fr_value_box_t *dst, fr_strerror_clear(); - /* - * Set size for all fixed length attributes. - */ - ret = network_max_size(dst_type); - /* * Lookup any names before continuing */ @@ -4993,36 +4986,10 @@ parse: */ case FR_TYPE_COMBO_IP_ADDR: if (fr_inet_pton(&dst->vb_ip, buffer, strlen(buffer), AF_UNSPEC, fr_hostname_lookups, true) < 0) return -1; - switch (dst->vb_ip.af) { - case AF_INET: - ret = network_max_size(FR_TYPE_IPV4_ADDR); - break; - - case AF_INET6: - ret = network_max_size(FR_TYPE_IPV6_ADDR); - break; - - default: - fr_strerror_printf("Bad address family %i", dst->vb_ip.af); - return -1; - } break; case FR_TYPE_COMBO_IP_PREFIX: if (fr_inet_pton(&dst->vb_ip, buffer, strlen(buffer), AF_UNSPEC, fr_hostname_lookups, true) < 0) return -1; - switch (dst->vb_ip.af) { - case AF_INET: - ret = network_max_size(FR_TYPE_IPV4_PREFIX); - break; - - case AF_INET6: - ret = network_max_size(FR_TYPE_IPV6_PREFIX); - break; - - default: - fr_strerror_printf("Bad address family %i", dst->vb_ip.af); - return -1; - } break; default: @@ -5031,7 +4998,6 @@ parse: } finish: - dst->vb_length = ret; dst->type = dst_type; dst->tainted = tainted;