Comment 6 for bug 725044

Revision history for this message
In , Richard (shiningarcanine) wrote :

There is an upstream bug report regarding this that contains a patch:

http://bugzilla.libsdl.org/show_bug.cgi?id=1090

Bug #354175 involves a program that is affected by this. Applying the upstream patch to media-libs/libsdl-1.2.14-r5 resolves it. The following commands can be used to test the patch:

ebuild $(equery which media-libs/libsdl-1.2.14-r5) prepare
cd /var/tmp/portage/media-libs/libsdl-1.2.14-r5/work/SDL-1.2.14
wget -O - http://bugzilla.libsdl.org/attachment.cgi?id=574 | patch --dry-run -p1
ebuild $(equery which media-libs/libsdl-1.2.14-r5) merge

The other ebuild versions, including the media-libs/libsdl-1.2.13-r1 ebuild used by stable, are also affected. The following commands can be used to test the patch with media-libs/libsdl-1.2.13-r1:

ebuild $(equery which media-libs/libsdl-1.2.13-r1) prepare
cd /var/tmp/portage/media-libs/libsdl-1.2.13-r1/work/SDL-1.2.13
wget -O - http://bugzilla.libsdl.org/attachment.cgi?id=574 | patch --dry-run -p1
ebuild $(equery which media-libs/libsdl-1.2.13-r1) merge

The reason we are seeing this issue in programs that rely on libsdl now is because of a change to glibc's memcpy() function late last year. The old implementation allowed programs to call memcpy() on overlapping regions. The new implementation copies memory in reverse, which broke any code that relied on the old implementation. The assumption that memcpy() works between overlapping regions of memory is illegal under ANSI C. There is a fairly lengthy bug report at the Fedora Linux bug tracker about this where Linus Torvalds commented on the issue:

https://bugzilla.redhat.com/show_bug.cgi?id=638477

I recommend inserting media-libs/libsdl-1.2.13-r2 and media-libs/libsdl-1.2.14-r6 into the portage tree with this patch. I also strongly recommend removing the existing ebuilds from the portage tree.