void ldb_msg_remove_element(struct ldb_message *msg, struct ldb_message_element *el)
{
ptrdiff_t n = (el - msg->elements);
- if (n >= msg->num_elements) {
- /* should we abort() here? */
+ if (n >= msg->num_elements || n < 0) {
+ /* the element is not in the list. the caller is crazy. */
return;
}
- if (n != msg->num_elements-1) {
- memmove(el, el+1, ((msg->num_elements-1) - n)*sizeof(*el));
- }
msg->num_elements--;
+ if (n != msg->num_elements) {
+ memmove(el, el+1, (msg->num_elements - n)*sizeof(*el));
+ }
}