Several fixes for bt_iter_pos related functions
authorFrancis Deslauriers <francis.deslauriers@polymtl.ca>
Wed, 4 Jul 2012 13:15:25 +0000 (09:15 -0400)
committerMathieu Desnoyers <mathieu.desnoyers@efficios.com>
Wed, 4 Jul 2012 13:15:25 +0000 (09:15 -0400)
Add verification so we free the array only if iterator is of type BT_SEEK_RESTORE
Add return statement at the end of case
Set type of bt_iter_pos returned by bt_iter_get_pos

[ Mathieu Desnoyers edit: check the iter_pos->type before the restore
  pointer in bt_iter_free_pos. The && operator is a sequence point, so
  the first check is done before the second. Since we might not be
  using the union for restore if type != BT_SEEK_RESTORE, check the
  type first before accessing the (possibly wrong) union field. ]

Signed-off-by: Francis Deslauriers <francis.deslauriers@polymtl.ca>
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
lib/iterator.c

index 52ec064904d066ce7812c6787f607099ebea7554..6b1a6d2ad1668a42d7a6f1e268d71f0b3d8e1193 100644 (file)
@@ -81,7 +81,7 @@ void bt_iter_free_pos(struct bt_iter_pos *iter_pos)
        if (!iter_pos)
                return;
 
-       if (iter_pos->u.restore) {
+       if (iter_pos->type == BT_SEEK_RESTORE && iter_pos->u.restore) {
                if (iter_pos->u.restore->stream_saved_pos) {
                        g_array_free(
                                iter_pos->u.restore->stream_saved_pos,
@@ -242,6 +242,7 @@ int bt_iter_set_pos(struct bt_iter *iter, const struct bt_iter_pos *iter_pos)
                        if (ret)
                                goto error;
                }
+               return 0;
        case BT_SEEK_TIME:
                tc = iter->ctx->tc;
 
@@ -339,6 +340,7 @@ struct bt_iter_pos *bt_iter_get_pos(struct bt_iter *iter)
        int i, stream_class_id, stream_id;
 
        pos = g_new0(struct bt_iter_pos, 1);
+       pos->type = BT_SEEK_RESTORE;
        pos->u.restore = g_new0(struct bt_saved_pos, 1);
        pos->u.restore->tc = tc;
        pos->u.restore->stream_saved_pos = g_array_new(FALSE, TRUE,
This page took 0.034229 seconds and 4 git commands to generate.