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;
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;
}
}
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));
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);
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);