]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
pass the correct 'end' pointer
authorAlan T. DeKok <aland@freeradius.org>
Thu, 6 Jan 2022 00:07:39 +0000 (19:07 -0500)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 6 Jan 2022 00:07:56 +0000 (19:07 -0500)
src/protocols/radius/decode.c

index fe5592e85bd0c8c083d08b9d78d51effc391029b..83a3f1727b885897392f09d2ab7a808580a40037 100644 (file)
@@ -790,8 +790,20 @@ static ssize_t decode_extended(TALLOC_CTX *ctx, fr_pair_list_t *out,
 
        FR_PROTO_HEX_DUMP(head, fraglen, "long-extended fragments");
 
-       ret = fr_radius_decode_pair_value(ctx, out,
-                                         parent, head, fraglen, packet_ctx);
+       /*
+        *      Reset the "end" pointer, because we're not passing in
+        *      the real data.
+        */
+       {
+               end = packet_ctx->end;
+               packet_ctx->end = head + fraglen;
+
+               ret = fr_radius_decode_pair_value(ctx, out,
+                                                 parent, head, fraglen, packet_ctx);
+
+               packet_ctx->end = end;
+       }
+
        talloc_free(head);
        if (ret < 0) return ret;
 
@@ -960,8 +972,20 @@ static ssize_t decode_wimax(TALLOC_CTX *ctx, fr_pair_list_t *out,
 
        FR_PROTO_HEX_DUMP(head, wimax_len, "Wimax fragments");
 
-       ret = fr_radius_decode_pair_value(ctx, out,
-                                         da, head, wimax_len, packet_ctx);
+       /*
+        *      Reset the "end" pointer, because we're not passing in
+        *      the real data.
+        */
+       {
+               end = packet_ctx->end;
+               packet_ctx->end = head + wimax_len;
+
+               ret = fr_radius_decode_pair_value(ctx, out,
+                                                 parent, head, wimax_len, packet_ctx);
+
+               packet_ctx->end = end;
+       }
+
        talloc_free(head);
        if (ret < 0) return ret;