mark_mapped_object_invalid(t, r->num, i);
continue;
}
- if (st == OSL_NO_STORAGE)
+ if (st == OSL_NO_STORAGE && !(cd->storage_flags & OSL_DONT_FREE))
free(r->volatile_objects[col->volatile_num].data);
}
if (t->num_mapped_columns) {
{
struct osl_column *col;
struct rb_node *node;
- int ret = check_rbtree_col(t, col_num, &col);
+ unsigned num_rows;
+ int ret;
+ if (n == 0)
+ return -E_RB_KEY_NOT_FOUND;
+ ret = osl_get_num_rows(t, &num_rows);
+ if (ret < 0)
+ return ret;
+ if (n > num_rows)
+ return -E_RB_KEY_NOT_FOUND;
+ ret = check_rbtree_col(t, col_num, &col);
if (ret < 0)
return ret;
node = rb_nth(col->rbtree.rb_node, n);