From: Alan T. DeKok Date: Thu, 6 Jan 2022 14:48:04 +0000 (-0500) Subject: check min/max lengths only for leaf data types X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=a4a52be18b8eb1c6ff40deda53a1ac12e2ca96fa;p=thirdparty%2Ffreeradius-server.git check min/max lengths only for leaf data types --- diff --git a/src/protocols/radius/decode.c b/src/protocols/radius/decode.c index 83a3f1727b8..654bf126387 100644 --- a/src/protocols/radius/decode.c +++ b/src/protocols/radius/decode.c @@ -1399,20 +1399,19 @@ ssize_t fr_radius_decode_pair_value(TALLOC_CTX *ctx, fr_pair_list_t *out, */ FR_PROTO_TRACE("Type \"%s\" (%u)", fr_table_str_by_value(fr_value_box_type_table, parent->type, "?Unknown?"), parent->type); - min = fr_radius_attr_sizes[parent->type][0]; - max = fr_radius_attr_sizes[parent->type][1]; - - if (data_len < min) { - FR_PROTO_TRACE("Data len %zu too short, need at least %zu", data_len, min); - goto raw; - } - if (data_len > max) { - FR_PROTO_TRACE("Data len %zu too long, must be less than or equal to %zu", data_len, max); - goto raw; - } - switch (parent->type) { case FR_TYPE_LEAF: + min = fr_radius_attr_sizes[parent->type][0]; + max = fr_radius_attr_sizes[parent->type][1]; + + if (data_len < min) { + FR_PROTO_TRACE("Data len %zu too short, need at least %zu", data_len, min); + goto raw; + } + if (data_len > max) { + FR_PROTO_TRACE("Data len %zu too long, must be less than or equal to %zu", data_len, max); + goto raw; + } break; case FR_TYPE_VSA: