libFLAC/format.c: Fix undefined behaviour
authorErik de Castro Lopo <erikd@mega-nerd.com>
Wed, 26 Aug 2015 07:13:39 +0000 (17:13 +1000)
committerErik de Castro Lopo <erikd@mega-nerd.com>
Wed, 26 Aug 2015 07:21:36 +0000 (17:21 +1000)
In the case where seek_table->num_points is zero, seek_table->points
will be NULL and passing that to qsort() invokes undefined behaviour.

Since seek_table->num_points is zero, the only sensible thing to do
is to short circuit return 0.

src/libFLAC/format.c

index 0f601af..0b1d10b 100644 (file)
@@ -275,6 +275,9 @@ FLAC_API unsigned FLAC__format_seektable_sort(FLAC__StreamMetadata_SeekTable *se
 
        FLAC__ASSERT(0 != seek_table);
 
+       if (seek_table->num_points == 0)
+               return 0;
+
        /* sort the seekpoints */
        qsort(seek_table->points, seek_table->num_points, sizeof(FLAC__StreamMetadata_SeekPoint), (int (*)(const void *, const void *))seekpoint_compare_);