diff --git a/gst/gstbufferlist.c b/gst/gstbufferlist.c index 9ca4d87798..16de4cecf0 100644 --- a/gst/gstbufferlist.c +++ b/gst/gstbufferlist.c @@ -149,6 +149,9 @@ gst_buffer_list_new_sized (guint size) gsize slice_size; guint n_allocated; + if (size == 0) + size = 1; + n_allocated = GST_ROUND_UP_16 (size); slice_size = sizeof (GstBufferList) + (n_allocated - 1) * sizeof (gpointer); diff --git a/tests/check/gst/gstbufferlist.c b/tests/check/gst/gstbufferlist.c index 54e7257297..2ac332342e 100644 --- a/tests/check/gst/gstbufferlist.c +++ b/tests/check/gst/gstbufferlist.c @@ -474,6 +474,15 @@ GST_START_TEST (test_calc_size) GST_END_TEST; +GST_START_TEST (test_new_sized_0) +{ + GstBufferList *b = gst_buffer_list_new_sized (0); + + gst_buffer_list_unref (b); +} + +GST_END_TEST; + static Suite * gst_buffer_list_suite (void) { @@ -491,6 +500,7 @@ gst_buffer_list_suite (void) tcase_add_test (tc_chain, test_expand_and_remove); tcase_add_test (tc_chain, test_get_writable); tcase_add_test (tc_chain, test_calc_size); + tcase_add_test (tc_chain, test_new_sized_0); return s; }