summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJim Ramsay <lack@gentoo.org>2011-02-17 20:43:29 +0000
committerJim Ramsay <lack@gentoo.org>2011-02-17 20:43:29 +0000
commit7313989e44599fcda8c1303c7406b62b0805e710 (patch)
tree7cf74ba9cfd7959d32ad6abd9de785cffa2a7ad0 /www-plugins/adobe-flash
parentVersion bump, remove old (diff)
downloadgentoo-2-7313989e44599fcda8c1303c7406b62b0805e710.tar.gz
gentoo-2-7313989e44599fcda8c1303c7406b62b0805e710.tar.bz2
gentoo-2-7313989e44599fcda8c1303c7406b62b0805e710.zip
Bug #354073: Patch 64-bit flash to fix memcpy issue with glibc-2.13
(Portage version: 2.1.9.34/cvs/Linux i686)
Diffstat (limited to 'www-plugins/adobe-flash')
-rw-r--r--www-plugins/adobe-flash/ChangeLog8
-rw-r--r--www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild216
-rw-r--r--www-plugins/adobe-flash/files/memcpy-to-memmove.sh40
3 files changed, 263 insertions, 1 deletions
diff --git a/www-plugins/adobe-flash/ChangeLog b/www-plugins/adobe-flash/ChangeLog
index ef77dd27156f..9952cb064ede 100644
--- a/www-plugins/adobe-flash/ChangeLog
+++ b/www-plugins/adobe-flash/ChangeLog
@@ -1,6 +1,12 @@
# ChangeLog for www-plugins/adobe-flash
# Copyright 1999-2011 Gentoo Foundation; Distributed under the GPL v2
-# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/ChangeLog,v 1.64 2011/02/13 00:58:41 fauli Exp $
+# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/ChangeLog,v 1.65 2011/02/17 20:43:29 lack Exp $
+
+*adobe-flash-10.2.152.27_p201011173-r2 (17 Feb 2011)
+
+ 17 Feb 2011; Jim Ramsay <lack@gentoo.org>
+ +adobe-flash-10.2.152.27_p201011173-r2.ebuild, +files/memcpy-to-memmove.sh:
+ Bug #354073: Patch 64-bit flash to fix memcpy issue with glibc-2.13
13 Feb 2011; Christian Faulhammer <fauli@gentoo.org>
adobe-flash-10.2.152.27.ebuild:
diff --git a/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild b/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild
new file mode 100644
index 000000000000..1cb070946ba9
--- /dev/null
+++ b/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild
@@ -0,0 +1,216 @@
+# Copyright 1999-2011 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/www-plugins/adobe-flash/adobe-flash-10.2.152.27_p201011173-r2.ebuild,v 1.1 2011/02/17 20:43:29 lack Exp $
+
+EAPI=3
+inherit rpm nsplugins multilib toolchain-funcs versionator
+
+# Note: There is no "square" for 32-bit! Just use the current 32-bit release:
+PV_REL=$(get_version_component_range 1-4)
+MY_32B_URI="http://fpdownload.macromedia.com/get/flashplayer/current/flash-plugin-${PV_REL}-release.i386.rpm"
+
+# Specal version parsing for date-based 'square' releases
+# For proper date ordering in the ebuild we are using CCYYMMDD, whereas Adobe
+# uses MMDDYY in their filename. Plus we tack on the release number, too.
+EBUILD_DATE=$(get_version_component_range $(get_version_component_count))
+DATE_SUFFIX=${EBUILD_DATE: -5:4}${EBUILD_DATE:3:2}
+REL_SUFFIX=${EBUILD_DATE: -1}
+MY_64B_URI="http://download.macromedia.com/pub/labs/flashplayer10/flashplayer10_2_p${REL_SUFFIX}_64bit_linux_${DATE_SUFFIX}.tar.gz"
+
+DESCRIPTION="Adobe Flash Player"
+SRC_URI="x86? ( ${MY_32B_URI} )
+amd64? (
+ multilib? (
+ 32bit? ( ${MY_32B_URI} )
+ 64bit? ( ${MY_64B_URI} )
+ )
+ !multilib? ( ${MY_64B_URI} )
+)"
+#HOMEPAGE="http://www.adobe.com/"
+HOMEPAGE="http://labs.adobe.com/technologies/flashplayer10/"
+IUSE="multilib nspluginwrapper +32bit +64bit vdpau bindist"
+SLOT="0"
+
+KEYWORDS="-* ~amd64 ~x86"
+LICENSE="AdobeFlash-10.1"
+RESTRICT="strip mirror"
+
+S="${WORKDIR}"
+
+NATIVE_DEPS="x11-libs/gtk+:2
+ media-libs/fontconfig
+ dev-libs/nss
+ net-misc/curl
+ 32bit? ( vdpau? ( x11-libs/libvdpau ) )
+ >=sys-libs/glibc-2.4"
+
+EMUL_DEPS="vdpau? ( >=app-emulation/emul-linux-x86-xlibs-20110129 )
+ >=app-emulation/emul-linux-x86-gtklibs-20100409-r1
+ app-emulation/emul-linux-x86-soundlibs"
+
+DEPEND="amd64? ( multilib? ( 32bit? ( nspluginwrapper? (
+ www-plugins/nspluginwrapper ) ) ) )"
+RDEPEND="x86? ( $NATIVE_DEPS )
+ amd64? (
+ multilib? (
+ 64bit? ( $NATIVE_DEPS )
+ 32bit? ( $EMUL_DEPS )
+ )
+ !multilib? ( $NATIVE_DEPS )
+ )
+ || ( media-fonts/liberation-fonts media-fonts/corefonts )
+ ${DEPEND}"
+
+# Where should this all go? (Bug #328639)
+INSTALL_BASE="opt/Adobe/flash-player"
+
+# Ignore QA warnings in these binary closed-source libraries, since we can't fix
+# them:
+QA_EXECSTACK="${INSTALL_BASE}32/libflashplayer.so
+ ${INSTALL_BASE}/libflashplayer.so"
+
+QA_DT_HASH="${INSTALL_BASE}32/libflashplayer.so
+ ${INSTALL_BASE}/libflashplayer.so"
+
+pkg_setup() {
+ einfo "Date is $EBUILD_DATE suffix is $DATE_SUFFIX"
+ if use x86; then
+ export native_install=1
+ elif use amd64; then
+ # amd64 users may unselect the native 64bit binary, if they choose
+ if ! use multilib || use 64bit; then
+ export native_install=1
+ else
+ unset native_install
+ fi
+
+ if use multilib && use 32bit; then
+ export amd64_32bit=1
+ else
+ unset amd64_32bit
+ fi
+
+ if use multilib && ! use 32bit && ! use 64bit; then
+ eerror "You must select at least one architecture USE flag (32bit or 64bit)"
+ die "No library version selected [-32bit -64bit]"
+ fi
+
+ unset need_lahf_wrapper
+ if [[ $native_install ]]; then
+ # 64bit flash requires the 'lahf' instruction (bug #268336)
+ # Also, check if *any* of the processors are affected (bug #286159)
+ if grep '^flags' /proc/cpuinfo | grep -qv 'lahf_lm'; then
+ export need_lahf_wrapper=1
+ fi
+
+ if use vdpau; then
+ ewarn "You have tried to enable VDPAU acceleration, but this is only"
+ ewarn "available for the 32-bit flash plugin at this time."
+ ewarn "Continuing with an unaccelerated 64-bit plugin."
+ if [[ $amd64_32bit ]]; then
+ ewarn "The 32-bit plugin will be accelerated."
+ fi
+ fi
+ fi
+ fi
+}
+
+src_compile() {
+ if [[ $need_lahf_wrapper ]]; then
+ # This experimental wrapper, from Maks Verver via bug #268336 should
+ # emulate the missing lahf instruction affected platforms.
+ $(tc-getCC) -fPIC -shared -nostdlib -lc -oflashplugin-lahf-fix.so \
+ "${FILESDIR}/flashplugin-lahf-fix.c" \
+ || die "Compile of flashplugin-lahf-fix.so failed"
+ fi
+ if use amd64 && ! use bindist && [[ $native_install ]]; then
+ # Bug #354073: Patch binary to use memmove instead of memcpy from
+ # Redhat's bug https://bugzilla.redhat.com/show_bug.cgi?id=638477#c94
+ cp libflashplayer.so libflashplayer.so.orig
+ sh "${FILESDIR}/memcpy-to-memmove.sh" libflashplayer.so \
+ || die "memcpy-to-memmove.sh failed"
+ fi
+ # TODO: Apparently changing memcpy to memmove helps the 32-bit plugin too...
+}
+
+src_install() {
+ if [[ $native_install ]]; then
+ # 32b RPM has things hidden in funny places
+ use x86 && pushd "${S}/usr/lib/flash-plugin"
+
+ exeinto /${INSTALL_BASE}
+ doexe libflashplayer.so
+ inst_plugin /${INSTALL_BASE}/libflashplayer.so
+
+ use x86 && popd
+
+ # 64b tarball has no readme file.
+ use x86 && dodoc "${S}/usr/share/doc/flash-plugin-${PV_REL}/readme.txt"
+ fi
+
+ if [[ $need_lahf_wrapper ]]; then
+ # This experimental wrapper, from Maks Verver via bug #268336 should
+ # emulate the missing lahf instruction affected platforms.
+ exeinto /${INSTALL_BASE}
+ doexe flashplugin-lahf-fix.so
+ inst_plugin /${INSTALL_BASE}/flashplugin-lahf-fix.so
+ fi
+
+ if [[ $amd64_32bit ]]; then
+ local oldabi="${ABI}"
+ ABI="x86"
+
+ # 32b plugin
+ pushd "${S}/usr/lib/flash-plugin"
+ exeinto /${INSTALL_BASE}32
+ doexe libflashplayer.so
+ inst_plugin /${INSTALL_BASE}32/libflashplayer.so
+ popd
+
+ ABI="${oldabi}"
+ fi
+
+ # The magic config file!
+ insinto "/etc/adobe"
+ doins "${FILESDIR}/mms.cfg"
+}
+
+pkg_postinst() {
+ if use amd64; then
+ if [[ $need_lahf_wrapper ]]; then
+ ewarn "Your processor does not support the 'lahf' instruction which is used"
+ ewarn "by Adobe's 64-bit flash binary. We have installed a wrapper which"
+ ewarn "should allow this plugin to run. If you encounter problems, please"
+ ewarn "adjust your USE flags to install only the 32-bit version and reinstall:"
+ ewarn " ${CATEGORY}/$PN[+32bit -64bit]"
+ elog
+ fi
+ if has_version 'www-plugins/nspluginwrapper'; then
+ if [[ $native_install ]]; then
+ # TODO: Perhaps parse the output of 'nspluginwrapper -l'
+ # However, the 64b flash plugin makes
+ # 'nspluginwrapper -l' segfault.
+ local FLASH_WRAPPER="${ROOT}/usr/lib64/nsbrowser/plugins/npwrapper.libflashplayer.so"
+ if [[ -f ${FLASH_WRAPPER} ]]; then
+ einfo "Removing duplicate 32-bit plugin wrapper: Native 64-bit plugin installed"
+ nspluginwrapper -r "${FLASH_WRAPPER}"
+ fi
+ else
+ einfo "nspluginwrapper detected: Installing plugin wrapper"
+ local oldabi="${ABI}"
+ ABI="x86"
+ local FLASH_SOURCE="${ROOT}/${INSTALL_BASE}32/libflashplayer.so"
+ nspluginwrapper -i "${FLASH_SOURCE}"
+ ABI="${oldabi}"
+ fi
+ elif [[ ! $native_install ]]; then
+ elog "To use the 32-bit flash player in a native 64-bit browser,"
+ elog "you must install www-plugins/nspluginwrapper"
+ fi
+ fi
+
+ ewarn "Flash player is closed-source, with a long history of security"
+ ewarn "issues. Please consider only running flash applets you know to"
+ ewarn "be safe. The 'flashblock' extension may help for mozilla users:"
+ ewarn " https://addons.mozilla.org/en-US/firefox/addon/433"
+}
diff --git a/www-plugins/adobe-flash/files/memcpy-to-memmove.sh b/www-plugins/adobe-flash/files/memcpy-to-memmove.sh
new file mode 100644
index 000000000000..b1632e583484
--- /dev/null
+++ b/www-plugins/adobe-flash/files/memcpy-to-memmove.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+# Quick and dirty, but inefficient shellscript that
+# turns all memcpy calls into memmove calls
+# From Ray Strode
+
+set -e
+
+INPUT="$1"
+
+MEMCPY=0x$(objdump -S -j .plt $INPUT | grep memcpy |awk '{ print $1 }')
+[ $MEMCPY = "0x" ] && echo "Can't find memcpy call in $INPUT PLT" 1>&2 && exit 1
+
+MEMMOVE=0x$(objdump -S -j .plt $INPUT | grep memmove |awk '{ print $1 }')
+[ $MEMMOVE = "0x" ] && echo "Can't find memmove call in $INPUT PLT" 1>&2 && exit 2
+
+DELTA=$(($MEMMOVE - $MEMCPY))
+MEMCPY="$(printf '%x' $MEMCPY)"
+
+TEMP_OUTPUT="$(mktemp)"
+trap "rm -f $TEMP_OUTPUT" ERR
+
+cp $INPUT $TEMP_OUTPUT
+objdump -S -j .text $INPUT | while read offset e8 byte1 byte2 byte3 byte4 call call_offset rest; do
+ test "$call_offset" = "$MEMCPY" || continue;
+
+ OFFSET=$(printf "0x%x" $((0x${offset%:} + 1)))
+ NUMBER="0x${byte4}${byte3}${byte2}${byte1}"
+ echo -n "Changing call at offset $OFFSET from [${byte1} ${byte2} ${byte3} ${byte4}]"
+ NUMBER=$(printf "0x%08x" $(($NUMBER + $DELTA)))
+
+ BYTE1=$(printf "%02x" $((($NUMBER >> 24) & 0xff)))
+ BYTE2=$(printf "%02x" $((($NUMBER >> 16) & 0xff)))
+ BYTE3=$(printf "%02x" $((($NUMBER >> 8) & 0xff)))
+ BYTE4=$(printf "%02x" $((($NUMBER >> 0) & 0xff)))
+
+ echo " to [${BYTE4} ${BYTE3} ${BYTE2} ${BYTE1}]"
+ echo -ne "\x$BYTE4\x$BYTE3\x$BYTE2\x$BYTE1" | dd of=$TEMP_OUTPUT bs=1 seek=$(($OFFSET)) count=4 conv=notrunc 2> /dev/null
+done
+
+mv $TEMP_OUTPUT $INPUT