]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
inst->xlat may not exist in some circumstances
authorAlan T. DeKok <aland@freeradius.org>
Mon, 28 Aug 2023 00:51:25 +0000 (20:51 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 28 Aug 2023 00:51:25 +0000 (20:51 -0400)
src/lib/unlang/xlat_expr.c

index c83492f28807601da0a997066dfcc46126400881..719bf77c4667d34fab617dce067320735d34a306 100644 (file)
@@ -1428,12 +1428,16 @@ static xlat_arg_parser_t const xlat_func_exists_arg[] = {
 /*
  *     We just print the xlat as-is.
  */
-static fr_slen_t xlat_expr_print_exists(fr_sbuff_t *out, UNUSED xlat_exp_t const *node, void *instance, fr_sbuff_escape_rules_t const *e_rules)
+static fr_slen_t xlat_expr_print_exists(fr_sbuff_t *out, xlat_exp_t const *node, void *instance, fr_sbuff_escape_rules_t const *e_rules)
 {
-       size_t                  at_in = fr_sbuff_used_total(out);
+       size_t  at_in = fr_sbuff_used_total(out);
        xlat_exists_inst_t      *inst = instance;
 
-       xlat_print(out, inst->xlat, e_rules);
+       if (inst->xlat) {
+               xlat_print(out, inst->xlat, e_rules);
+       } else {
+               xlat_print_node(out, node->call.args, xlat_exp_head(node->call.args), e_rules);
+       }
 
        return fr_sbuff_used_total(out) - at_in;
 }