* Child attributes are created in a temporary list. Any list editing is
* taken care of by the parent map.
*/
- fr_assert(map->op == T_OP_EQ);
+ fr_assert((map->op == T_OP_EQ) || (current->parent->map->op == T_OP_SUB_EQ));
/*
* We create this VP in the "current" context, so that it's freed on
*/
MEM(current->lhs.vp = fr_pair_afrom_da(current, tmpl_da(current->lhs.vpt)));
fr_pair_append(¤t->parent->rhs.pair_list, current->lhs.vp);
+ current->lhs.vp->op = map->op;
current->in_parent_list = true;
} else if (tmpl_find_vp(¤t->lhs.vp, request, current->lhs.vpt) < 0) {
found = fr_pair_find_by_da(list, found, vp->da)) {
int rcode;
- rcode = fr_value_box_cmp(&vp->data, &found->data);
- if (rcode != 0) continue;
+ rcode = fr_value_box_cmp_op(vp->op, &vp->data, &found->data);
+ if (rcode < 0) return -1;
+
+ if (!rcode) continue;
if (fr_edit_list_pair_delete(el, list, found) < 0) return -1;
break;