fr_sbuff_t sbuff;
fr_sbuff_uctx_talloc_t sbuff_ctx;
size_t len;
- fr_value_box_entry_t entry;
- if (fr_value_box_is_safe_for(vb, fr_ldap_box_escape)) return 0;
+ fr_assert(!fr_value_box_is_safe_for(vb, fr_ldap_box_escape));
if ((vb->type != FR_TYPE_STRING) && (fr_value_box_cast_in_place(vb, vb, FR_TYPE_STRING, NULL) < 0)) {
- fr_value_box_clear_value(vb);
return -1;
}
if (len == vb->vb_length) {
talloc_free(fr_sbuff_buff(&sbuff));
} else {
- entry = vb->entry;
fr_sbuff_trim_talloc(&sbuff, len);
- fr_value_box_clear_value(vb);
- fr_value_box_strdup_shallow(vb, NULL, fr_sbuff_buff(&sbuff), vb->tainted);
- vb->entry = entry;
+ fr_value_box_strdup_shallow_replace(vb, fr_sbuff_buff(&sbuff), len);
}
- fr_value_box_mark_safe_for(vb, fr_ldap_box_escape);
-
return 0;
}
len = fr_ldap_uri_escape_func(NULL, fr_sbuff_buff(&sbuff), vb->vb_length * 3 + 1, vb->vb_strvalue, NULL);
fr_sbuff_trim_talloc(&sbuff, len);
- fr_value_box_clear_value(vb);
- fr_value_box_strdup_shallow(vb, NULL, fr_sbuff_buff(&sbuff), vb->tainted);
+ fr_value_box_strdup_shallow_replace(vb, fr_sbuff_buff(&sbuff), len);
return 0;
}
void *arg = NULL;
rlm_sql_escape_uctx_t *ctx = uctx;
rlm_sql_t const *inst = talloc_get_type_abort_const(ctx->sql, rlm_sql_t);
- fr_value_box_entry_t entry;
rlm_sql_thread_t *thread = talloc_get_type_abort(module_thread(inst->mi)->data, rlm_sql_thread_t);
/*
len = inst->sql_escape_func(request, fr_sbuff_buff(&sbuff), vb->vb_length * 3 + 1, vb->vb_strvalue, arg);
if (len < 0) goto error;
- /*
- * fr_value_box_strdup_shallow resets the dlist entries - take a copy
- */
- entry = vb->entry;
fr_sbuff_trim_talloc(&sbuff, len);
- fr_value_box_clear_value(vb);
- fr_value_box_strdup_shallow(vb, NULL, fr_sbuff_buff(&sbuff), vb->tainted);
+ fr_value_box_strdup_shallow_replace(vb, fr_sbuff_buff(&sbuff), len);
/*
* Different databases have slightly different ideas as
* cross-contaminate "safe" values across databases.
*/
fr_value_box_mark_safe_for(vb, inst->driver);
- vb->entry = entry;
return 0;
}