]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
must always check the return code of fr_value_box_cast
authorAlan T. DeKok <aland@freeradius.org>
Wed, 16 Jul 2025 19:31:30 +0000 (15:31 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Wed, 16 Jul 2025 19:31:30 +0000 (15:31 -0400)
src/lib/server/virtual_servers.c
src/lib/util/value.c
src/lib/util/value.h
src/modules/rlm_sqlcounter/rlm_sqlcounter.c

index 633ebdce44fea5df6e9a712a70508794b21f0a3f..e456e773b48b326e9a2dd04f466bd5b6ae403ac8 100644 (file)
@@ -723,8 +723,7 @@ static inline CC_HINT(always_inline) int virtual_server_push_finally(request_t *
 
                if (!vp) goto check_default;    /* No packet type found, still allow default finally section */
 
-               (void) fr_value_box_cast(NULL, &key, FR_TYPE_UINT16, NULL, &vp->data);
-               fr_assert(key.type == FR_TYPE_UINT16);  /* Cast must succeed */
+               if (fr_value_box_cast(NULL, &key, FR_TYPE_UINT16, NULL, &vp->data) < 0) return -1;
 
                if (key.vb_uint16 >= talloc_array_length(vs->finally_by_packet_type) ||
                    !(instruction = vs->finally_by_packet_type[key.vb_uint16])) goto check_default;
index 337a9d795376d6816387c79acd6cac137ff216da..f16b44dfa1386c6ce0a8b6bf62399b1055352012 100644 (file)
@@ -6613,7 +6613,7 @@ bool fr_value_box_is_truthy(fr_value_box_t const *in)
 
        default:
                fr_value_box_init_null(&box);
-               (void) fr_value_box_cast(NULL, &box, FR_TYPE_BOOL, NULL, in);
+               if (fr_value_box_cast(NULL, &box, FR_TYPE_BOOL, NULL, in) < 0) return false;
                return box.vb_bool;
        }
 }
index e2f43741f7860cb5e7d6349fdcc0d9d548f03670..fa0b25ae2c3be82fa56a9eef2c1698b2b352052c 100644 (file)
@@ -1052,11 +1052,11 @@ ssize_t         fr_value_box_from_network(TALLOC_CTX *ctx,
 int            fr_value_box_cast(TALLOC_CTX *ctx, fr_value_box_t *dst,
                                  fr_type_t dst_type, fr_dict_attr_t const *dst_enumv,
                                  fr_value_box_t const *src)
-               CC_HINT(nonnull(2,5));
+               CC_HINT(warn_unused_result,nonnull(2,5));
 
 int            fr_value_box_cast_in_place(TALLOC_CTX *ctx, fr_value_box_t *vb,
                                           fr_type_t dst_type, fr_dict_attr_t const *dst_enumv)
-               CC_HINT(nonnull(1));
+               CC_HINT(warn_unused_result,nonnull(1));
 
 bool           fr_value_box_is_truthy(fr_value_box_t const *box)
                CC_HINT(nonnull(1));
index 42a588640a97eda44e6322a6c5fec42d3b4aed5a..ec4bb221f6a5236287fd68dbd055bcfe9c30d8a7 100644 (file)
@@ -349,7 +349,10 @@ static unlang_action_t mod_authorize_resume(unlang_result_t *p_result, module_ct
                case 0:         /* found */
                {
                        fr_value_box_t  existing;
-                       fr_value_box_cast(NULL, &existing, FR_TYPE_UINT64, NULL, &vp->data);
+                       if (fr_value_box_cast(NULL, &existing, FR_TYPE_UINT64, NULL, &vp->data) < 0) {
+                               RPEDEBUG("Failed casting to uint64");
+                               RETURN_UNLANG_FAIL;
+                       }
                        if (fr_value_box_cmp(&vb, &existing) == 1) {
                                RDEBUG2("Leaving existing %s value of %pV" , env->reply_attr->name,
                                        &vp->data);
@@ -367,7 +370,10 @@ static unlang_action_t mod_authorize_resume(unlang_result_t *p_result, module_ct
                        RETURN_UNLANG_OK;
                }
 
-               fr_value_box_cast(vp, &vp->data, vp->data.type, NULL, &vb);
+               if (fr_value_box_cast(vp, &vp->data, vp->data.type, NULL, &vb) < 0) {
+                       RPEDEBUG("Failed casting to %s", fr_type_to_str(vp->data.type));
+                       RETURN_UNLANG_FAIL;
+               }
 
                RDEBUG2("%pP", vp);