]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
rlm_mruby: fix NULL dereference on pair->vp and wrong variable in dict fallback
authorAlexander Bainbridge-Sedivy <alex.bainbridge@inkbridge.io>
Mon, 25 May 2026 13:50:45 +0000 (09:50 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 28 May 2026 19:51:47 +0000 (15:51 -0400)
src/modules/rlm_mruby/mruby.c

index ceda6ea8aecaeb18c332fb134eefc02843e74b46..d85b24314355d2e12535df5f5adaa3a05e18e47d 100644 (file)
@@ -195,6 +195,7 @@ static mrb_value mruby_pair_list_keys(mrb_state *mrb, mrb_value self)
        pair = (mruby_pair_t *)DATA_PTR(self);
        if (!pair) mrb_raise(mrb, E_RUNTIME_ERROR, "Failed to retrieve C data");
 
+       if (!pair->vp) return keys;
        keys = mrb_ary_new(mrb);
        if (!pair->vp) return keys;
        for (vp = fr_pair_list_head(&pair->vp->vp_group); vp; vp = fr_pair_list_next(&pair->vp->vp_group, vp)) {
@@ -570,7 +571,7 @@ static mrb_value mruby_pair_list_missing(mrb_state *mrb, mrb_value self)
        child_da = fr_dict_attr_by_name(NULL, da, child_attr_name);
 
        if (!child_da && fr_type_is_group(da->type)) {
-               child_da = fr_dict_attr_by_name(NULL, fr_dict_root(fr_dict_internal()), attr_name);
+               child_da = fr_dict_attr_by_name(NULL, fr_dict_root(fr_dict_internal()), child_attr_name);
        }
 
        if (!child_da) mrb_raisef(mrb, E_ARGUMENT_ERROR, "Unknown or invalid attriubte name \"%s\"", attr_name);