When using rpmbuild on Fedora 33, the build fails with:
error: ‘__builtin_strncpy’ specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
This was fixed as part of projectm change d4d74f6d. This change takes the
relevant parts of that commit.
Note that the projectm commit contains several other warning fixes that might
affect Clementine builds in the future.
In fedora 31, the gstreamer1-plugins-ugly package was removed. A
gstreamer1-plugins-ugly-free package was added in fedora 27 and
gstreamer1-plugins-ugly had depended on that before removal.
Note that there is still a gstreamer1-plugins-ugly package available
in rpmfusion.
When opening a context menu on an internet item, the selected items are stored
in the InternetModel instance. In cases when the items are removed, certain menu
options can cause a crash. A specific case is downloading a podcast when the
user has chosen to limit the number of visible episodes. The subtree for the
podcast is rebuilt after the download completes, so if a context menu was opened
during the download time, selecting the append to playlist option will attempt
to operate on bad indexes.
This fix uses the rowsAboutToBeRemoved signal to remove these stored indexes.
There are likely another rare cases where the indexes can become invalid. For
example, sibling items within a subtree may be removed, causing the stored
indexes to become incorrect or out of range.
Read the G_FILE_ATTRIBUTE_UNIX_IS_MOUNTPOINT attribute (unix::is-mountpoint) to
determine if a volume is a mount that udisks2 has detected. Ignoring these
prevents network mounts from showing up as devices.
GioLister::UnmountDevice calls g_object_unref on the GVolume object held by a
DeviceInfo. This appears to be left over from a time before DeviceInfo held
onto the volume.
The opml parsing code handles cases where there are extra levels in the xml file
by copying the child to the main container. This corrupts the source instance
during the copy, which leads to corruption in the destination, and ultimately a
crash when it is later used.
To fix, do the copy in two steps, copying the child container to a temporary
location before copying to the destination.