]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
check min/max lengths only for leaf data types
authorAlan T. DeKok <aland@freeradius.org>
Thu, 6 Jan 2022 14:48:04 +0000 (09:48 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 6 Jan 2022 14:48:04 +0000 (09:48 -0500)
src/protocols/radius/decode.c

index 83a3f1727b885897392f09d2ab7a808580a40037..654bf1263876f5a2f2933889942d1587fe8a058c 100644 (file)
@@ -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: