+++ /dev/null
-Index: libexslt/crypto.c
-===================================================================
---- libexslt/crypto.c (revision 1479)
-+++ libexslt/crypto.c (working copy)
-@@ -595,11 +595,13 @@ exsltCryptoRc4EncryptFunction (xmlXPathP
- int str_len = 0, bin_len = 0, hex_len = 0;
- xmlChar *key = NULL, *str = NULL, *padkey = NULL;
- xmlChar *bin = NULL, *hex = NULL;
-+ xsltTransformContextPtr tctxt = NULL;
-
-- if ((nargs < 1) || (nargs > 3)) {
-+ if (nargs != 2) {
- xmlXPathSetArityError (ctxt);
- return;
- }
-+ tctxt = xsltXPathGetTransformContext(ctxt);
-
- str = xmlXPathPopString (ctxt);
- str_len = xmlUTF8Strlen (str);
-@@ -611,7 +613,7 @@ exsltCryptoRc4EncryptFunction (xmlXPathP
- }
-
- key = xmlXPathPopString (ctxt);
-- key_len = xmlUTF8Strlen (str);
-+ key_len = xmlUTF8Strlen (key);
-
- if (key_len == 0) {
- xmlXPathReturnEmptyString (ctxt);
-@@ -620,15 +622,33 @@ exsltCryptoRc4EncryptFunction (xmlXPathP
- return;
- }
-
-- padkey = xmlMallocAtomic (RC4_KEY_LENGTH);
-+ padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1);
-+ if (padkey == NULL) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
-+ xmlXPathReturnEmptyString (ctxt);
-+ goto done;
-+ }
-+ memset(padkey, 0, RC4_KEY_LENGTH + 1);
-+
- key_size = xmlUTF8Strsize (key, key_len);
-+ if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: key size too long or key broken\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
-+ xmlXPathReturnEmptyString (ctxt);
-+ goto done;
-+ }
- memcpy (padkey, key, key_size);
-- memset (padkey + key_size, '\0', sizeof (padkey));
-
- /* encrypt it */
- bin_len = str_len;
- bin = xmlStrdup (str);
- if (bin == NULL) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: Failed to allocate string\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
- xmlXPathReturnEmptyString (ctxt);
- goto done;
- }
-@@ -638,6 +658,9 @@ exsltCryptoRc4EncryptFunction (xmlXPathP
- hex_len = str_len * 2 + 1;
- hex = xmlMallocAtomic (hex_len);
- if (hex == NULL) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: Failed to allocate result\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
- xmlXPathReturnEmptyString (ctxt);
- goto done;
- }
-@@ -670,11 +693,13 @@ exsltCryptoRc4DecryptFunction (xmlXPathP
- int str_len = 0, bin_len = 0, ret_len = 0;
- xmlChar *key = NULL, *str = NULL, *padkey = NULL, *bin =
- NULL, *ret = NULL;
-+ xsltTransformContextPtr tctxt = NULL;
-
-- if ((nargs < 1) || (nargs > 3)) {
-+ if (nargs != 2) {
- xmlXPathSetArityError (ctxt);
- return;
- }
-+ tctxt = xsltXPathGetTransformContext(ctxt);
-
- str = xmlXPathPopString (ctxt);
- str_len = xmlUTF8Strlen (str);
-@@ -686,7 +711,7 @@ exsltCryptoRc4DecryptFunction (xmlXPathP
- }
-
- key = xmlXPathPopString (ctxt);
-- key_len = xmlUTF8Strlen (str);
-+ key_len = xmlUTF8Strlen (key);
-
- if (key_len == 0) {
- xmlXPathReturnEmptyString (ctxt);
-@@ -695,22 +720,51 @@ exsltCryptoRc4DecryptFunction (xmlXPathP
- return;
- }
-
-- padkey = xmlMallocAtomic (RC4_KEY_LENGTH);
-+ padkey = xmlMallocAtomic (RC4_KEY_LENGTH + 1);
-+ if (padkey == NULL) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: Failed to allocate padkey\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
-+ xmlXPathReturnEmptyString (ctxt);
-+ goto done;
-+ }
-+ memset(padkey, 0, RC4_KEY_LENGTH + 1);
- key_size = xmlUTF8Strsize (key, key_len);
-+ if ((key_size > RC4_KEY_LENGTH) || (key_size < 0)) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: key size too long or key broken\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
-+ xmlXPathReturnEmptyString (ctxt);
-+ goto done;
-+ }
- memcpy (padkey, key, key_size);
-- memset (padkey + key_size, '\0', sizeof (padkey));
-
- /* decode hex to binary */
- bin_len = str_len;
- bin = xmlMallocAtomic (bin_len);
-+ if (bin == NULL) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: Failed to allocate string\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
-+ xmlXPathReturnEmptyString (ctxt);
-+ goto done;
-+ }
- ret_len = exsltCryptoHex2Bin (str, str_len, bin, bin_len);
-
- /* decrypt the binary blob */
- ret = xmlMallocAtomic (ret_len);
-+ if (ret == NULL) {
-+ xsltTransformError(tctxt, NULL, tctxt->inst,
-+ "exsltCryptoRc4EncryptFunction: Failed to allocate result\n");
-+ tctxt->state = XSLT_STATE_STOPPED;
-+ xmlXPathReturnEmptyString (ctxt);
-+ goto done;
-+ }
- PLATFORM_RC4_DECRYPT (ctxt, padkey, bin, ret_len, ret, ret_len);
-
- xmlXPathReturnString (ctxt, ret);
-
-+done:
- if (key != NULL)
- xmlFree (key);
- if (str != NULL)
+++ /dev/null
-# Copyright 1999-2009 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/dev-libs/libxslt/libxslt-1.1.24-r1.ebuild,v 1.3 2009/05/31 23:10:10 eva Exp $
-
-inherit libtool eutils python autotools
-
-DESCRIPTION="XSLT libraries and tools"
-HOMEPAGE="http://www.xmlsoft.org/"
-SRC_URI="ftp://xmlsoft.org/${PN}/${P}.tar.gz"
-
-LICENSE="MIT"
-SLOT="0"
-KEYWORDS="alpha amd64 arm hppa ia64 m68k ~mips ppc ppc64 s390 sh sparc ~sparc-fbsd x86 ~x86-fbsd"
-IUSE="crypt debug examples python"
-
-RDEPEND=">=dev-libs/libxml2-2.6.27
- crypt? ( >=dev-libs/libgcrypt-1.1.92 )
- python? ( dev-lang/python )"
-DEPEND="${RDEPEND}"
-
-src_unpack() {
- unpack ${A}
- cd "${S}"
-
- # we still require the 1.1.8 patch for the .m4 file, to add
- # the CXXFLAGS defines <obz@gentoo.org>
- epatch "${FILESDIR}/libxslt.m4-${PN}-1.1.8.patch"
-
- # fix parallel install, bug #212784.
- epatch "${FILESDIR}/${PN}-1.1.23-parallel-install.patch"
-
- # Patch Makefile to fix bug #99382 so that html gets installed in ${PF}
- sed -i -e "s:libxslt-\$(VERSION):${PF}:" doc/Makefile.am
-
- # Fix broken <python-2.5 site-packages detection
- # see bug #86756 and bug #218643
- python_version
- sed -i "s:^\(AC_SUBST(PYTHON_SITE_PACKAGES)\):PYTHON_SITE_PACKAGES=\"/usr/$(get_libdir)/python${PYVER}/site-packages\"\n\1:" configure.in
-
- # Fix broken rc4 encrypt. bug #232172
- epatch "${FILESDIR}/${P}-exslt_crypt.patch"
-
- eautoreconf
- epunt_cxx
- elibtoolize
-}
-
-src_compile() {
- local myconf="$(use_with python) \
- $(use_with crypt crypto) \
- $(use_with debug) \
- $(use_with debug mem-debug)"
-
- econf ${myconf}
- emake || die "Compilation failed"
-}
-
-src_install() {
- emake DESTDIR="${D}" \
- DOCS_DIR=/usr/share/doc/${PF}/python \
- install || die "Installation failed"
-
- dodoc AUTHORS ChangeLog Copyright FEATURES NEWS README TODO || die "dodoc failed"
- rm -rf "${D}/usr/share/doc/${PN}-python-${PV}"
-
- if ! use examples; then
- rm -rf "${D}/usr/share/doc/${PF}/python/examples"
- fi
-}