diff --git a/dev-lang/php/Manifest b/dev-lang/php/Manifest index 4b53c72..f887a2d 100644 --- a/dev-lang/php/Manifest +++ b/dev-lang/php/Manifest @@ -1,10 +1 @@ -AUX 20php5-envd 145 BLAKE2B 06476b8fc04d1e835496b417ac752f0834ddbe8584e4fddc6db0aa5e6845b82cdea0a1355c77125375dcdd0f0a3c19de5f3a8a64ee93950f96c437a16f971567 SHA512 581aa86479e3cd584ee1bc6dc6d4a135fe8ec343fe5519566d728d81f7018cfb23658bd0c0368951d380982c75adbb4f45acf3c146868aaf4e4ec8e9f2fad1ce -AUX php-7.2.13-intl-use-icu-namespace.patch 11499 BLAKE2B 0dca597d5afd0309595499e3ff860e2d83183e570d02f202a1e2966d430606f09b8dc7427c4007e791914c8ee093a2e7cbf7372baa7896ac06d1912f2e707c09 SHA512 1332eb76feda2100685e319ae046512cf12b55a0d2be537c2172ccf035b547d851f84fb7941389882d7e3d674d91441e018c7b8f1e3f0d4cced05c314d5821fe -AUX php-7.2.34-use-after-free-bug76047.patch 5542 BLAKE2B ccdabbe7a45f10f7a6666afabf27f2ab18ed011989447d950debe703e5f210d86a728c11bf883c74dc4ce88d634a8f10d1c9130a6e2dfb486ab92ebc1fb15e3c SHA512 8e2cc3dab0e3f3d7ba9b4a8cf4a16daa9cd908a5c1dc42ee1dfc44be82b4faffbb46b5bb0a88d15252edf4c95e05b4877c94aeaa05e9c511f3a49adafbc62c73 -AUX php-fpm_at-simple.service 316 BLAKE2B 0ba10f3e3b004fbf14956e1e4f04f59b8a127e6717fe6b92c09b9f931033a11551c75fbbee9010f6b694c5a8758ca0eec9eed457ae304ba0dea8f2c256c3b8d4 SHA512 7367a3f8d3874f8e0c76f331ba613a0250db02f60ad9f87affaf448dcb5bc34bcecb91d88f415764a12b24b46ae3d1b738a002af9f77a4b707e916e83a0021fd -AUX php-fpm_at.service 317 BLAKE2B f13fc38fcc0575a8517ee8d07b120efda37eabd2355061d0fdc303604c6b02ad42d7301180d86c977d5e585f5dd685343c592e37a6e0f44933707be79e0b77e0 SHA512 27982f9e2d958bfa75c89c7d3531e48d17fc388b1cdcbc8e09051b236b1184ee2baabdfcc567c19d9fcd067d4b3b86f171015616d8da42fccdabd89432d865e8 -AUX php-freetype-2.9.1.patch 7667 BLAKE2B efc8f829bbad11b3e7b654d0882213ecb9aae766060d51f93446a6293a2f607339faba484c7b0b2f9318a5c5442da3c09e25aeda20dbc5e3258bf1009f8625b4 SHA512 0a06189f6fb3513cd2dcf9ddb590360475e2dd9a7aa8b13ab66c389c1ed40ce2361681f017cd3c6219f5b40a0a9d4978e57ca3ee4bacb7657db3285136fd2875 -AUX php-iodbc-header-location.patch 481 BLAKE2B 9ea6a5d529dc7a8c78eeee800900372bc14309a05e352b2838da32e1384b61b507fdb623c9400094aa5b637eb1a87da92c72600eff79b18b8989ef90af56a0fa SHA512 86469f657d8807f005c28fd2149770c881add8f243fdfea087956c7987277597fe400a7af23f624f26da270356604717ed9cd04771154d7cf2ffe7237972372b -DIST php-7.2.34.tar.xz 12309432 BLAKE2B 50522786d39296bc7411931c4f357d53c7a25da264192a6a6e7f7594f3dee108e22974e00a4bdc4d3af269ab63d07b28045ff6b4f4f0c79672ed059882647b93 SHA512 7ecc3de3b5db41ec4ff6a5ce6c7e77dc330753c6f3fd87db4d07d6bb763a0b047e83afeef2251b4c6a5d2ff53fd9f3d7e99d091ef2e2c6ab8f18db7447d8a97d -EBUILD php-7.2.34-r2.ebuild 22872 BLAKE2B 041fd990f7c2e89ad83476bf66644321cad0c6132d6db5c88c07cbc44fc6246d012c2b0ea6553cfd886665bd8b34e300c986ed8c3de9b7e43bd4e0e0d9620525 SHA512 1b546d9911fc81bf306af751b0571efee65063388fe9d879da360bab61231bb321fb69c3c494c8bda5ccc2cc871308fd17e4a413e7654293640b00fdecb0a4ac -MISC metadata.xml 3268 BLAKE2B 4abc96d858186ab5bc6f0797fb3f1cf7f5aaa0b07a4652dcc16aa65e197bd73803f6bac717084c0c9a194e7da5b6632523105205011a0d39221aabc16ade8e2e SHA512 1413edb5293cb93ad8f94376f11b9952ca6369b667ae23baed56d9cbaa68cb9cfa5a80da7dd7184ba84f08d5a4054068da1c10daca81d1730e7b6edebba8b29f +DIST php-7.4.33.tar.xz 10420144 BLAKE2B e75817e79c698628c873c90afb3b5677480d03ecf07e8f2e26a062bc5b91affc6079e792e864f28cf12d45f86e5d01ede289ecdcefc06477986d193d22c982ef SHA512 499b63b99e5d8e8082ff89d3a91b4cb9a593ea7553b96e48863414c13d2e50275904ed29070e2232e529ee91160f505e6060a4d129cb5bf098aa5b6ea0928d3d diff --git a/dev-lang/php/files/bug81656-gcc-11.patch b/dev-lang/php/files/bug81656-gcc-11.patch new file mode 100644 index 0000000..8dfe1de --- /dev/null +++ b/dev-lang/php/files/bug81656-gcc-11.patch @@ -0,0 +1,53 @@ +From bb00a649e0c1ac57718cd9971e7e6f933cb2dadd Mon Sep 17 00:00:00 2001 +From: Michael Wallner +Date: Thu, 25 Nov 2021 07:43:14 +0100 +Subject: [PATCH] fix #81656: GCC-11 silently ignores -R + +--- + build/php.m4 | 28 ++++++++++++++-------------- + 1 file changed, 14 insertions(+), 14 deletions(-) + +diff --git a/build/php.m4 b/build/php.m4 +index 3af2b8b72d47..4697c5df9274 100644 +--- a/build/php.m4 ++++ b/build/php.m4 +@@ -279,25 +279,25 @@ dnl + dnl Checks for -R, etc. switch. + dnl + AC_DEFUN([PHP_RUNPATH_SWITCH],[ +-AC_MSG_CHECKING([if compiler supports -R]) +-AC_CACHE_VAL(php_cv_cc_dashr,[ ++AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) ++AC_CACHE_VAL(php_cv_cc_rpath,[ + SAVE_LIBS=$LIBS +- LIBS="-R /usr/$PHP_LIBDIR $LIBS" +- AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_dashr=yes],[php_cv_cc_dashr=no]) ++ LIBS="-Wl,-rpath,/usr/$PHP_LIBDIR $LIBS" ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_rpath=yes],[php_cv_cc_rpath=no]) + LIBS=$SAVE_LIBS]) +-AC_MSG_RESULT([$php_cv_cc_dashr]) +-if test $php_cv_cc_dashr = "yes"; then +- ld_runpath_switch=-R ++AC_MSG_RESULT([$php_cv_cc_rpath]) ++if test $php_cv_cc_rpath = "yes"; then ++ ld_runpath_switch=-Wl,-rpath, + else +- AC_MSG_CHECKING([if compiler supports -Wl,-rpath,]) +- AC_CACHE_VAL(php_cv_cc_rpath,[ ++ AC_MSG_CHECKING([if compiler supports -R]) ++ AC_CACHE_VAL(php_cv_cc_dashr,[ + SAVE_LIBS=$LIBS +- LIBS="-Wl,-rpath,/usr/$PHP_LIBDIR $LIBS" +- AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_rpath=yes],[php_cv_cc_rpath=no]) ++ LIBS="-R /usr/$PHP_LIBDIR $LIBS" ++ AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])],[php_cv_cc_dashr=yes],[php_cv_cc_dashr=no]) + LIBS=$SAVE_LIBS]) +- AC_MSG_RESULT([$php_cv_cc_rpath]) +- if test $php_cv_cc_rpath = "yes"; then +- ld_runpath_switch=-Wl,-rpath, ++ AC_MSG_RESULT([$php_cv_cc_dashr]) ++ if test $php_cv_cc_dashr = "yes"; then ++ ld_runpath_switch=-R + else + dnl Something innocuous. + ld_runpath_switch=-L diff --git a/dev-lang/php/files/php-7.2.13-intl-use-icu-namespace.patch b/dev-lang/php/files/php-7.2.13-intl-use-icu-namespace.patch deleted file mode 100644 index b5d2b47..0000000 --- a/dev-lang/php/files/php-7.2.13-intl-use-icu-namespace.patch +++ /dev/null @@ -1,379 +0,0 @@ -Based on the following upstream commits: - -https://github.com/php/php-src/commit/8d35a423838eb462cd39ee535c5d003073cc5f22 -https://github.com/php/php-src/commit/d8200e48857aeaf09f7127751efc5632ef7660a7 -https://github.com/php/php-src/commit/9a8e7b571896f39f83cb000fdb7c466b6d328d52 - ---- a/ext/intl/breakiterator/breakiterator_class.cpp -+++ b/ext/intl/breakiterator/breakiterator_class.cpp -@@ -38,6 +38,7 @@ extern "C" { - } - - using PHP::CodePointBreakIterator; -+using icu::RuleBasedBreakIterator; - - /* {{{ Global variables */ - zend_class_entry *BreakIterator_ce_ptr; ---- a/ext/intl/breakiterator/breakiterator_class.h -+++ b/ext/intl/breakiterator/breakiterator_class.h -@@ -26,6 +26,8 @@ - - #ifndef USE_BREAKITERATOR_POINTER - typedef void BreakIterator; -+#else -+using icu::BreakIterator; - #endif - - typedef struct { ---- a/ext/intl/breakiterator/breakiterator_methods.cpp -+++ b/ext/intl/breakiterator/breakiterator_methods.cpp -@@ -32,6 +32,8 @@ extern "C" { - } - - using PHP::CodePointBreakIterator; -+using icu::BreakIterator; -+using icu::Locale; - - U_CFUNC PHP_METHOD(BreakIterator, __construct) - { ---- a/ext/intl/breakiterator/codepointiterator_internal.cpp -+++ b/ext/intl/breakiterator/codepointiterator_internal.cpp -@@ -33,6 +33,8 @@ typedef union { - - using namespace PHP; - -+using icu::UCharCharacterIterator; -+ - UOBJECT_DEFINE_RTTI_IMPLEMENTATION(CodePointBreakIterator); - - CodePointBreakIterator::CodePointBreakIterator() ---- a/ext/intl/breakiterator/codepointiterator_internal.h -+++ b/ext/intl/breakiterator/codepointiterator_internal.h -@@ -18,8 +18,11 @@ - #define CODEPOINTITERATOR_INTERNAL_H - - #include -+#include - --using U_ICU_NAMESPACE::BreakIterator; -+using icu::BreakIterator; -+using icu::CharacterIterator; -+using icu::UnicodeString; - - namespace PHP { - ---- a/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp -+++ b/ext/intl/breakiterator/rulebasedbreakiterator_methods.cpp -@@ -26,6 +26,9 @@ extern "C" { - #include "../intl_convertcpp.h" - #include "../intl_common.h" - -+using icu::RuleBasedBreakIterator; -+using icu::Locale; -+ - static inline RuleBasedBreakIterator *fetch_rbbi(BreakIterator_object *bio) { - return (RuleBasedBreakIterator*)bio->biter; - } ---- a/ext/intl/calendar/calendar_class.cpp -+++ b/ext/intl/calendar/calendar_class.cpp -@@ -34,6 +34,9 @@ extern "C" { - #include - } - -+using icu::GregorianCalendar; -+using icu::Locale; -+ - /* {{{ Global variables */ - zend_class_entry *Calendar_ce_ptr; - zend_class_entry *GregorianCalendar_ce_ptr; ---- a/ext/intl/calendar/calendar_class.h -+++ b/ext/intl/calendar/calendar_class.h -@@ -26,6 +26,8 @@ - - #ifndef USE_CALENDAR_POINTER - typedef void Calendar; -+#else -+using icu::Calendar; - #endif - - typedef struct { ---- a/ext/intl/calendar/calendar_methods.cpp -+++ b/ext/intl/calendar/calendar_methods.cpp -@@ -40,6 +40,8 @@ extern "C" { - } - #include "../common/common_enum.h" - -+using icu::Locale; -+ - U_CFUNC PHP_METHOD(IntlCalendar, __construct) - { - zend_throw_exception( NULL, ---- a/ext/intl/calendar/gregoriancalendar_methods.cpp -+++ b/ext/intl/calendar/gregoriancalendar_methods.cpp -@@ -23,6 +23,8 @@ - #include - #include - #include -+#include -+ - extern "C" { - #include "../php_intl.h" - #include "../intl_common.h" -@@ -34,6 +36,11 @@ extern "C" { - #include "zend_exceptions.h" - } - -+using icu::GregorianCalendar; -+using icu::Locale; -+using icu::UnicodeString; -+using icu::StringPiece; -+ - static inline GregorianCalendar *fetch_greg(Calendar_object *co) { - return (GregorianCalendar*)co->ucal; - } ---- a/ext/intl/common/common_date.cpp -+++ b/ext/intl/common/common_date.cpp -@@ -27,6 +27,9 @@ extern "C" { - - #include "zend_portability.h" - -+using icu::TimeZone; -+using icu::UnicodeString; -+ - /* {{{ timezone_convert_datetimezone - * The timezone in DateTime and DateTimeZone is not unified. */ - U_CFUNC TimeZone *timezone_convert_datetimezone(int type, ---- a/ext/intl/common/common_date.h -+++ b/ext/intl/common/common_date.h -@@ -28,6 +28,8 @@ U_CDECL_END - - #include - -+using icu::TimeZone; -+ - U_CFUNC TimeZone *timezone_convert_datetimezone(int type, void *object, int is_datetime, intl_error *outside_error, const char *func); - U_CFUNC int intl_datetime_decompose(zval *z, double *millis, TimeZone **tz, - intl_error *err, const char *func); ---- a/ext/intl/common/common_enum.h -+++ b/ext/intl/common/common_enum.h -@@ -75,6 +75,7 @@ U_CFUNC zval *zoi_with_current_get_current_data(zend_object_iterator *iter); - U_CFUNC void zoi_with_current_invalidate_current(zend_object_iterator *iter); - - #ifdef __cplusplus -+using icu::StringEnumeration; - U_CFUNC void IntlIterator_from_StringEnumeration(StringEnumeration *se, zval *object); - #endif - ---- a/ext/intl/converter/converter.c -+++ b/ext/intl/converter/converter.c -@@ -18,6 +18,8 @@ - #include "zend_exceptions.h" - - #include -+#include -+#include - #include - #include - ---- a/ext/intl/dateformat/dateformat_format_object.cpp -+++ b/ext/intl/dateformat/dateformat_format_object.cpp -@@ -33,6 +33,12 @@ extern "C" { - #include "../common/common_date.h" - } - -+using icu::Locale; -+using icu::DateFormat; -+using icu::GregorianCalendar; -+using icu::StringPiece; -+using icu::SimpleDateFormat; -+ - static const DateFormat::EStyle valid_styles[] = { - DateFormat::kNone, - DateFormat::kFull, ---- a/ext/intl/dateformat/dateformat_helpers.cpp -+++ b/ext/intl/dateformat/dateformat_helpers.cpp -@@ -28,6 +28,8 @@ extern "C" { - #include "../calendar/calendar_class.h" - } - -+using icu::GregorianCalendar; -+ - int datefmt_process_calendar_arg(zval* calendar_zv, - Locale const& locale, - const char *func_name, ---- a/ext/intl/dateformat/dateformat_helpers.h -+++ b/ext/intl/dateformat/dateformat_helpers.h -@@ -22,11 +22,16 @@ - #endif - - #include -+#include - - extern "C" { - #include "../php_intl.h" - } - -+using icu::Locale; -+using icu::Calendar; -+using icu::DateFormat; -+ - int datefmt_process_calendar_arg(zval* calendar_zv, - Locale const& locale, - const char *func_name, ---- a/ext/intl/grapheme/grapheme_string.c -+++ b/ext/intl/grapheme/grapheme_string.c -@@ -24,6 +24,7 @@ - #include "grapheme_util.h" - - #include -+#include - #include - #include - #include -@@ -834,10 +835,10 @@ PHP_FUNCTION(grapheme_extract) - pstr = str + start; - - /* just in case pstr points in the middle of a character, move forward to the start of the next char */ -- if ( !UTF8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { -- char *str_end = str + str_len; -+ if ( !U8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { -+ unsigned char *str_end = str + str_len; - -- while ( !UTF8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { -+ while ( !U8_IS_SINGLE(*pstr) && !U8_IS_LEAD(*pstr) ) { - pstr++; - if ( pstr >= str_end ) { - intl_error_set( NULL, U_ILLEGAL_ARGUMENT_ERROR, ---- a/ext/intl/intl_convertcpp.h -+++ b/ext/intl/intl_convertcpp.h -@@ -26,6 +26,8 @@ - #include - #include - -+using icu::UnicodeString; -+ - int intl_stringFromChar(UnicodeString &ret, char *str, size_t str_len, UErrorCode *status); - - zend_string* intl_charFromString(const UnicodeString &from, UErrorCode *status); ---- a/ext/intl/msgformat/msgformat_helpers.cpp -+++ b/ext/intl/msgformat/msgformat_helpers.cpp -@@ -78,6 +78,16 @@ MessageFormatAdapter::getMessagePattern(MessageFormat* m) { - #endif - U_NAMESPACE_END - -+using icu::Formattable; -+using icu::Format; -+using icu::DateFormat; -+using icu::MessageFormat; -+#ifdef HAS_MESSAGE_PATTERN -+using icu::MessagePattern; -+#endif -+using icu::MessageFormatAdapter; -+using icu::FieldPosition; -+ - U_CFUNC int32_t umsg_format_arg_count(UMessageFormat *fmt) - { - int32_t fmt_count = 0; -@@ -229,15 +239,16 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo, - UnicodeString typeString = mp.getSubstring(type_part); - /* This is all based on the rules in the docs for MessageFormat - * @see http://icu-project.org/apiref/icu4c/classMessageFormat.html */ -- if (typeString == "number") { -+#define ASCII_LITERAL(s) UNICODE_STRING(s, sizeof(s)-1) -+ if (typeString == ASCII_LITERAL("number")) { - MessagePattern::Part style_part = mp.getPart(i + 1); /* Not advancing i */ - if (style_part.getType() == UMSGPAT_PART_TYPE_ARG_STYLE) { - UnicodeString styleString = mp.getSubstring(style_part); -- if (styleString == "integer") { -+ if (styleString == ASCII_LITERAL("integer")) { - type = Formattable::kInt64; -- } else if (styleString == "currency") { -+ } else if (styleString == ASCII_LITERAL("currency")) { - type = Formattable::kDouble; -- } else if (styleString == "percent") { -+ } else if (styleString == ASCII_LITERAL("percent")) { - type = Formattable::kDouble; - } else { /* some style invalid/unknown to us */ - type = Formattable::kDouble; -@@ -245,12 +256,13 @@ static HashTable *umsg_parse_format(MessageFormatter_object *mfo, - } else { // if missing style, part, make it a double - type = Formattable::kDouble; - } -- } else if ((typeString == "date") || (typeString == "time")) { -+ } else if ((typeString == ASCII_LITERAL("date")) || (typeString == ASCII_LITERAL("time"))) { - type = Formattable::kDate; -- } else if ((typeString == "spellout") || (typeString == "ordinal") -- || (typeString == "duration")) { -+ } else if ((typeString == ASCII_LITERAL("spellout")) || (typeString == ASCII_LITERAL("ordinal")) -+ || (typeString == ASCII_LITERAL("duration"))) { - type = Formattable::kDouble; - } -+#undef ASCII_LITERAL - } else { - /* If there's no UMSGPAT_PART_TYPE_ARG_TYPE right after a - * UMSGPAT_ARG_TYPE_SIMPLE argument, then the pattern ---- a/ext/intl/normalizer/normalizer_normalize.c -+++ b/ext/intl/normalizer/normalizer_normalize.c -@@ -24,6 +24,7 @@ - #include "normalizer_class.h" - #include "normalizer_normalize.h" - #include "intl_convert.h" -+#include - - /* {{{ proto string Normalizer::normalize( string $input [, string $form = FORM_C] ) - * Normalize a string. }}} */ ---- a/ext/intl/timezone/timezone_class.cpp -+++ b/ext/intl/timezone/timezone_class.cpp -@@ -37,6 +37,8 @@ extern "C" { - #include - } - -+using icu::Calendar; -+ - /* {{{ Global variables */ - U_CDECL_BEGIN - zend_class_entry *TimeZone_ce_ptr = NULL; ---- a/ext/intl/timezone/timezone_class.h -+++ b/ext/intl/timezone/timezone_class.h -@@ -29,6 +29,8 @@ - - #ifndef USE_TIMEZONE_POINTER - typedef void TimeZone; -+#else -+using icu::TimeZone; - #endif - - typedef struct { ---- a/ext/intl/timezone/timezone_methods.cpp -+++ b/ext/intl/timezone/timezone_methods.cpp -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - #include "intl_convertcpp.h" - - #include "../common/common_date.h" -@@ -37,6 +38,9 @@ extern "C" { - } - #include "common/common_enum.h" - -+using icu::Locale; -+using icu::Calendar; -+ - U_CFUNC PHP_METHOD(IntlTimeZone, __construct) - { - zend_throw_exception( NULL, ---- a/ext/intl/uchar/uchar.c -+++ b/ext/intl/uchar/uchar.c -@@ -3,6 +3,7 @@ - #include "intl_convert.h" - - #include -+#include - - #define IC_METHOD(mname) PHP_METHOD(IntlChar, mname) - --- -2.19.2 - diff --git a/dev-lang/php/files/php-7.2.34-use-after-free-bug76047.patch b/dev-lang/php/files/php-7.2.34-use-after-free-bug76047.patch deleted file mode 100644 index b3a864e..0000000 --- a/dev-lang/php/files/php-7.2.34-use-after-free-bug76047.patch +++ /dev/null @@ -1,174 +0,0 @@ -Backport of https://git.php.net/?p=php-src.git;a=commit;h=ef1e4891b47949c8dc0f9482eef9454a0ecdfa1d - ---- a/Zend/tests/bug52361.phpt -+++ b/Zend/tests/bug52361.phpt -@@ -25,9 +25,8 @@ try { - --EXPECTF-- - 1. Exception: aaa in %sbug52361.php:5 - Stack trace: --#0 %sbug52361.php(13): aaa->__destruct() --#1 %sbug52361.php(16): bbb() --#2 {main} -+#0 %sbug52361.php(16): aaa->__destruct() -+#1 {main} - 2. Exception: bbb in %sbug52361.php:13 - Stack trace: - #0 %sbug52361.php(16): bbb() ---- /dev/null -+++ b/Zend/tests/bug76047.phpt -@@ -0,0 +1,68 @@ -+--TEST-- -+Bug #76047: Use-after-free when accessing already destructed backtrace arguments -+--FILE-- -+a); -+ $backtrace = (new Exception)->getTrace(); -+ var_dump($backtrace); -+ } -+} -+ -+function test($arg) { -+ $arg = str_shuffle(str_repeat('A', 79)); -+ $vuln = new Vuln(); -+ $vuln->a = $arg; -+} -+ -+function test2($arg) { -+ $$arg = 1; // Trigger symbol table -+ $arg = str_shuffle(str_repeat('A', 79)); -+ $vuln = new Vuln(); -+ $vuln->a = $arg; -+} -+ -+test('x'); -+test2('x'); -+ -+?> -+--EXPECTF-- -+array(1) { -+ [0]=> -+ array(6) { -+ ["file"]=> -+ string(%d) "%s" -+ ["line"]=> -+ int(%d) -+ ["function"]=> -+ string(10) "__destruct" -+ ["class"]=> -+ string(4) "Vuln" -+ ["type"]=> -+ string(2) "->" -+ ["args"]=> -+ array(0) { -+ } -+ } -+} -+array(1) { -+ [0]=> -+ array(6) { -+ ["file"]=> -+ string(%d) "%s" -+ ["line"]=> -+ int(%d) -+ ["function"]=> -+ string(10) "__destruct" -+ ["class"]=> -+ string(4) "Vuln" -+ ["type"]=> -+ string(2) "->" -+ ["args"]=> -+ array(0) { -+ } -+ } -+} ---- a/Zend/zend_vm_def.h -+++ b/Zend/zend_vm_def.h -@@ -2366,9 +2366,9 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) - uint32_t call_info = EX_CALL_INFO(); - - if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { -+ EG(current_execute_data) = EX(prev_execute_data); - i_free_compiled_variables(execute_data); - -- EG(current_execute_data) = EX(prev_execute_data); - if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { - zend_object *object = Z_OBJ(execute_data->This); - #if 0 -@@ -2394,12 +2394,12 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) - LOAD_NEXT_OPLINE(); - ZEND_VM_LEAVE(); - } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { -+ EG(current_execute_data) = EX(prev_execute_data); - i_free_compiled_variables(execute_data); - - if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { - zend_clean_and_cache_symbol_table(EX(symbol_table)); - } -- EG(current_execute_data) = EX(prev_execute_data); - - /* Free extra args before releasing the closure, - * as that may free the op_array. */ -@@ -2449,6 +2449,7 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) - ZEND_VM_LEAVE(); - } else { - if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { -+ EG(current_execute_data) = EX(prev_execute_data); - i_free_compiled_variables(execute_data); - if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { - if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { -@@ -2456,7 +2457,6 @@ ZEND_VM_HELPER(zend_leave_helper, ANY, ANY) - } - zend_vm_stack_free_extra_args_ex(call_info, execute_data); - } -- EG(current_execute_data) = EX(prev_execute_data); - if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { - OBJ_RELEASE((zend_object*)EX(func)->op_array.prototype); - } ---- a/Zend/zend_vm_execute.h -+++ b/Zend/zend_vm_execute.h -@@ -434,9 +434,9 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ - uint32_t call_info = EX_CALL_INFO(); - - if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP|ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS|ZEND_CALL_ALLOCATED)) == 0)) { -+ EG(current_execute_data) = EX(prev_execute_data); - i_free_compiled_variables(execute_data); - -- EG(current_execute_data) = EX(prev_execute_data); - if (UNEXPECTED(call_info & ZEND_CALL_RELEASE_THIS)) { - zend_object *object = Z_OBJ(execute_data->This); - #if 0 -@@ -462,12 +462,12 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ - LOAD_NEXT_OPLINE(); - ZEND_VM_LEAVE(); - } else if (EXPECTED((call_info & (ZEND_CALL_CODE|ZEND_CALL_TOP)) == 0)) { -+ EG(current_execute_data) = EX(prev_execute_data); - i_free_compiled_variables(execute_data); - - if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { - zend_clean_and_cache_symbol_table(EX(symbol_table)); - } -- EG(current_execute_data) = EX(prev_execute_data); - - /* Free extra args before releasing the closure, - * as that may free the op_array. */ -@@ -517,6 +517,7 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ - ZEND_VM_LEAVE(); - } else { - if (EXPECTED((call_info & ZEND_CALL_CODE) == 0)) { -+ EG(current_execute_data) = EX(prev_execute_data); - i_free_compiled_variables(execute_data); - if (UNEXPECTED(call_info & (ZEND_CALL_HAS_SYMBOL_TABLE|ZEND_CALL_FREE_EXTRA_ARGS))) { - if (UNEXPECTED(call_info & ZEND_CALL_HAS_SYMBOL_TABLE)) { -@@ -524,7 +525,6 @@ static ZEND_OPCODE_HANDLER_RET ZEND_FASTCALL zend_leave_helper_SPEC(ZEND_OPCODE_ - } - zend_vm_stack_free_extra_args_ex(call_info, execute_data); - } -- EG(current_execute_data) = EX(prev_execute_data); - if (UNEXPECTED(call_info & ZEND_CALL_CLOSURE)) { - OBJ_RELEASE((zend_object*)EX(func)->op_array.prototype); - } - diff --git a/dev-lang/php/files/php-7.4-openssl.patch b/dev-lang/php/files/php-7.4-openssl.patch new file mode 100644 index 0000000..998c6ed --- /dev/null +++ b/dev-lang/php/files/php-7.4-openssl.patch @@ -0,0 +1,11 @@ +--- a/ext/openssl/openssl.c 2023-10-03 14:25:32.113984176 +0200 ++++ b/ext/openssl/openssl.c 2023-10-03 14:26:00.597980289 +0200 +@@ -1517,7 +1517,7 @@ + REGISTER_LONG_CONSTANT("PKCS7_NOSIGS", PKCS7_NOSIGS, CONST_CS|CONST_PERSISTENT); + + REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_PADDING", RSA_PKCS1_PADDING, CONST_CS|CONST_PERSISTENT); +- REGISTER_LONG_CONSTANT("OPENSSL_SSLV23_PADDING", RSA_SSLV23_PADDING, CONST_CS|CONST_PERSISTENT); ++// REGISTER_LONG_CONSTANT("OPENSSL_SSLV23_PADDING", RSA_SSLV23_PADDING, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OPENSSL_NO_PADDING", RSA_NO_PADDING, CONST_CS|CONST_PERSISTENT); + REGISTER_LONG_CONSTANT("OPENSSL_PKCS1_OAEP_PADDING", RSA_PKCS1_OAEP_PADDING, CONST_CS|CONST_PERSISTENT); + diff --git a/dev-lang/php/files/php-7.4.33-CVE-2022-31631.patch b/dev-lang/php/files/php-7.4.33-CVE-2022-31631.patch new file mode 100644 index 0000000..6aa3095 --- /dev/null +++ b/dev-lang/php/files/php-7.4.33-CVE-2022-31631.patch @@ -0,0 +1,50 @@ +From 921b6813da3237a83e908998483f46ae3d8bacba Mon Sep 17 00:00:00 2001 +From: "Christoph M. Becker" +Date: Mon, 31 Oct 2022 17:20:23 +0100 +Subject: [PATCH] Fix #81740: PDO::quote() may return unquoted string + +`sqlite3_snprintf()` expects its first parameter to be `int`; we need +to avoid overflow. +--- + ext/pdo_sqlite/sqlite_driver.c | 3 +++ + ext/pdo_sqlite/tests/bug81740.phpt | 17 +++++++++++++++++ + 2 files changed, 20 insertions(+) + create mode 100644 ext/pdo_sqlite/tests/bug81740.phpt + +diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c +index 4233ff10ff2e..5a72a1eda23f 100644 +--- a/ext/pdo_sqlite/sqlite_driver.c ++++ b/ext/pdo_sqlite/sqlite_driver.c +@@ -232,6 +232,9 @@ static char *pdo_sqlite_last_insert_id(pdo_dbh_t *dbh, const char *name, size_t + /* NB: doesn't handle binary strings... use prepared stmts for that */ + static int sqlite_handle_quoter(pdo_dbh_t *dbh, const char *unquoted, size_t unquotedlen, char **quoted, size_t *quotedlen, enum pdo_param_type paramtype ) + { ++ if (unquotedlen > (INT_MAX - 3) / 2) { ++ return 0; ++ } + *quoted = safe_emalloc(2, unquotedlen, 3); + sqlite3_snprintf(2*unquotedlen + 3, *quoted, "'%q'", unquoted); + *quotedlen = strlen(*quoted); +diff --git a/ext/pdo_sqlite/tests/bug81740.phpt b/ext/pdo_sqlite/tests/bug81740.phpt +new file mode 100644 +index 000000000000..99fb07c3048b +--- /dev/null ++++ b/ext/pdo_sqlite/tests/bug81740.phpt +@@ -0,0 +1,17 @@ ++--TEST-- ++Bug #81740 (PDO::quote() may return unquoted string) ++--SKIPIF-- ++ ++--INI-- ++memory_limit=-1 ++--FILE-- ++quote($string)); ++?> ++--EXPECT-- ++bool(false) diff --git a/dev-lang/php/files/php-freetype-2.9.1.patch b/dev-lang/php/files/php-freetype-2.9.1.patch deleted file mode 100644 index 02dfd9c..0000000 --- a/dev-lang/php/files/php-freetype-2.9.1.patch +++ /dev/null @@ -1,233 +0,0 @@ ---- a/ext/gd/config.m4 2018-04-24 11:09:54.000000000 -0400 -+++ b/ext/gd/config.m4 2018-05-04 15:18:49.867283889 -0400 -@@ -186,21 +186,36 @@ - AC_DEFUN([PHP_GD_FREETYPE2],[ - if test "$PHP_FREETYPE_DIR" != "no"; then - -- for i in $PHP_FREETYPE_DIR /usr/local /usr; do -- if test -f "$i/bin/freetype-config"; then -- FREETYPE2_DIR=$i -- FREETYPE2_CONFIG="$i/bin/freetype-config" -- break -+ AC_PATH_PROG(PKG_CONFIG, pkg-config, no) -+ AC_MSG_CHECKING(for freetype2) -+ -+ if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then -+ -+ FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2` -+ FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2` -+ FREETYPE2_VERSION=`$PKG_CONFIG --modversion freetype2` -+ FREETYPE2_DIR="found" -+ -+ AC_MSG_RESULT(from pkgconfig: version $FREETYPE2_VERSION found) -+ else -+ -+ for i in $PHP_FREETYPE_DIR /usr/local /usr; do -+ if test -f "$i/bin/freetype-config"; then -+ FREETYPE2_DIR=$i -+ FREETYPE2_CONFIG="$i/bin/freetype-config" -+ break -+ fi -+ done -+ -+ if test -z "$FREETYPE2_DIR"; then -+ AC_MSG_ERROR([freetype-config not found.]) - fi -- done - -- if test -z "$FREETYPE2_DIR"; then -- AC_MSG_ERROR([freetype-config not found.]) -+ FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` -+ FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` -+ AC_MSG_RESULT(found via freetype-config) - fi - -- FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` -- FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` -- - PHP_EVAL_INCLINE($FREETYPE2_CFLAGS) - PHP_EVAL_LIBLINE($FREETYPE2_LIBS, GD_SHARED_LIBADD) - AC_DEFINE(HAVE_LIBFREETYPE,1,[ ]) ---- a/configure 2018-04-24 11:10:05.000000000 -0400 -+++ b/configure 2018-05-04 15:18:45.626367913 -0400 -@@ -34348,21 +34348,79 @@ - - if test "$PHP_FREETYPE_DIR" != "no"; then - -- for i in $PHP_FREETYPE_DIR /usr/local /usr; do -- if test -f "$i/bin/freetype-config"; then -- FREETYPE2_DIR=$i -- FREETYPE2_CONFIG="$i/bin/freetype-config" -- break -+ # Extract the first word of "pkg-config", so it can be a program name with args. -+set dummy pkg-config; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_path_PKG_CONFIG+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ case $PKG_CONFIG in -+ [\\/]* | ?:[\\/]*) -+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. -+ ;; -+ *) -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" -+ ;; -+esac -+fi -+PKG_CONFIG=$ac_cv_path_PKG_CONFIG -+if test -n "$PKG_CONFIG"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -+$as_echo "$PKG_CONFIG" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype2" >&5 -+$as_echo_n "checking for freetype2... " >&6; } -+ -+ -+ if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then -+ -+ FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2` -+ FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2` -+ FREETYPE2_VERSION=`$PKG_CONFIG --modversion freetype2` -+ FREETYPE2_DIR="found" -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: from pkgconfig: version $FREETYPE2_VERSION found" >&5 -+$as_echo "from pkgconfig: version $FREETYPE2_VERSION found" >&6; } -+ else -+ -+ for i in $PHP_FREETYPE_DIR /usr/local /usr; do -+ if test -f "$i/bin/freetype-config"; then -+ FREETYPE2_DIR=$i -+ FREETYPE2_CONFIG="$i/bin/freetype-config" -+ break -+ fi -+ done -+ -+ if test -z "$FREETYPE2_DIR"; then -+ as_fn_error $? "freetype-config not found." "$LINENO" 5 - fi -- done - -- if test -z "$FREETYPE2_DIR"; then -- as_fn_error $? "freetype-config not found." "$LINENO" 5 -+ FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` -+ FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found via freetype-config" >&5 -+$as_echo "found via freetype-config" >&6; } - fi - -- FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` -- FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` -- - - for ac_i in $FREETYPE2_CFLAGS; do - case $ac_i in -@@ -36019,21 +36076,78 @@ - - if test "$PHP_FREETYPE_DIR" != "no"; then - -- for i in $PHP_FREETYPE_DIR /usr/local /usr; do -- if test -f "$i/bin/freetype-config"; then -- FREETYPE2_DIR=$i -- FREETYPE2_CONFIG="$i/bin/freetype-config" -- break -+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for freetype2" >&5 -+$as_echo_n "checking for freetype2... " >&6; } -+ # Extract the first word of "pkg-config", so it can be a program name with args. -+set dummy pkg-config; ac_word=$2 -+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -+$as_echo_n "checking for $ac_word... " >&6; } -+if ${ac_cv_path_PKG_CONFIG+:} false; then : -+ $as_echo_n "(cached) " >&6 -+else -+ case $PKG_CONFIG in -+ [\\/]* | ?:[\\/]*) -+ ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. -+ ;; -+ *) -+ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -+for as_dir in $PATH -+do -+ IFS=$as_save_IFS -+ test -z "$as_dir" && as_dir=. -+ for ac_exec_ext in '' $ac_executable_extensions; do -+ if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -+ ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" -+ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 -+ break 2 -+ fi -+done -+ done -+IFS=$as_save_IFS -+ -+ test -z "$ac_cv_path_PKG_CONFIG" && ac_cv_path_PKG_CONFIG="no" -+ ;; -+esac -+fi -+PKG_CONFIG=$ac_cv_path_PKG_CONFIG -+if test -n "$PKG_CONFIG"; then -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -+$as_echo "$PKG_CONFIG" >&6; } -+else -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -+$as_echo "no" >&6; } -+fi -+ -+ -+ -+ if test -x "$PKG_CONFIG" && $PKG_CONFIG --exists freetype2 ; then -+ -+ FREETYPE2_CFLAGS=`$PKG_CONFIG --cflags freetype2` -+ FREETYPE2_LIBS=`$PKG_CONFIG --libs freetype2` -+ FREETYPE2_VERSION=`$PKG_CONFIG --modversion freetype2` -+ -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: from pkgconfig: version $FREETYPE_VERSON found" >&5 -+$as_echo "from pkgconfig: version $FREETYPE_VERSON found" >&6; } -+ else -+ -+ for i in $PHP_FREETYPE_DIR /usr/local /usr; do -+ if test -f "$i/bin/freetype-config"; then -+ FREETYPE2_DIR=$i -+ FREETYPE2_CONFIG="$i/bin/freetype-config" -+ break -+ fi -+ done -+ -+ if test -z "$FREETYPE2_DIR"; then -+ as_fn_error $? "freetype-config not found." "$LINENO" 5 - fi -- done - -- if test -z "$FREETYPE2_DIR"; then -- as_fn_error $? "freetype-config not found." "$LINENO" 5 -+ FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` -+ FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` -+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: found via freetype-config" >&5 -+$as_echo "found via freetype-config" >&6; } - fi - -- FREETYPE2_CFLAGS=`$FREETYPE2_CONFIG --cflags` -- FREETYPE2_LIBS=`$FREETYPE2_CONFIG --libs` -- - - for ac_i in $FREETYPE2_CFLAGS; do - case $ac_i in diff --git a/dev-lang/php/php-7.2.34-r2.ebuild b/dev-lang/php/php-7.4.33-r1.ebuild similarity index 78% rename from dev-lang/php/php-7.2.34-r2.ebuild rename to dev-lang/php/php-7.4.33-r1.ebuild index 643a737..4104af8 100644 --- a/dev-lang/php/php-7.2.34-r2.ebuild +++ b/dev-lang/php/php-7.4.33-r1.ebuild @@ -1,10 +1,13 @@ -# Copyright 1999-2021 Gentoo Authors +# Copyright 1999-2022 Gentoo Authors # Distributed under the terms of the GNU General Public License v2 EAPI="7" -inherit flag-o-matic systemd autotools toolchain-funcs +WANT_AUTOMAKE="none" +inherit flag-o-matic systemd autotools + +MY_PV=${PV/_rc/RC} DESCRIPTION="The PHP language runtime engine" HOMEPAGE="https://www.php.net/" SRC_URI="https://www.php.net/distributions/${P}.tar.xz" @@ -18,7 +21,9 @@ LICENSE="PHP-3.01 unicode? ( BSD-2 LGPL-2.1 )" SLOT="$(ver_cut 1-2)" -KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos" +KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~ppc-macos ~x64-macos" + +S="${WORKDIR}/${PN}-${MY_PV}" # We can build the following SAPIs in the given order SAPIS="embed cli cgi fpm apache2 phpdbg" @@ -30,87 +35,101 @@ IUSE="${IUSE} IUSE="${IUSE} acl argon2 bcmath berkdb bzip2 calendar cdb cjk coverage +ctype curl debug - enchant exif +fileinfo +filter firebird - +flatfile ftp gd gdbm gmp +hash +iconv imap inifile - intl iodbc ipv6 +json kerberos ldap ldap-sasl libedit libressl lmdb + enchant exif ffi +fileinfo +filter firebird + +flatfile ftp gd gdbm gmp +iconv imap inifile + intl iodbc ipv6 +jit +json kerberos ldap ldap-sasl libedit lmdb mhash mssql mysql mysqli nls oci8-instant-client odbc +opcache pcntl pdo +phar +posix postgres qdbm - readline recode selinux +session session-mm sharedmem + readline selinux +session session-mm sharedmem +simplexml snmp soap sockets sodium spell sqlite ssl - sysvipc systemd test tidy +tokenizer tokyocabinet truetype unicode wddx webp - +xml xmlreader xmlwriter xmlrpc xpm xslt zip zip-encryption zlib" + sysvipc systemd test tidy +tokenizer tokyocabinet truetype unicode webp + +xml xmlreader xmlwriter xmlrpc xpm xslt zip zlib" + +# Without USE=readline or libedit, the interactive "php -a" CLI will hang. +# The Oracle instant client provides its own incompatible ldap library. +REQUIRED_USE=" + || ( cli cgi fpm apache2 embed phpdbg ) + cli? ( ^^ ( readline libedit ) ) + !cli? ( ?? ( readline libedit ) ) + truetype? ( gd zlib ) + webp? ( gd zlib ) + cjk? ( gd zlib ) + exif? ( gd zlib ) + xpm? ( gd zlib ) + gd? ( zlib ) + simplexml? ( xml ) + soap? ( xml ) + xmlrpc? ( xml iconv ) + xmlreader? ( xml ) + xmlwriter? ( xml ) + xslt? ( xml ) + ldap-sasl? ( ldap ) + oci8-instant-client? ( !ldap ) + qdbm? ( !gdbm ) + session-mm? ( session !threads ) + mysql? ( || ( mysqli pdo ) ) + firebird? ( pdo ) + mssql? ( pdo ) +" + +RESTRICT="!test? ( test )" # The supported (that is, autodetected) versions of BDB are listed in # the ./configure script. Other versions *work*, but we need to stick to # the ones that can be detected to avoid a repeat of bug #564824. COMMON_DEPEND=" >=app-eselect/eselect-php-0.9.1[apache2?,fpm?] - >=dev-libs/libpcre-8.32[unicode] + >=dev-libs/libpcre2-10.30[jit?,unicode] fpm? ( acl? ( sys-apps/acl ) ) apache2? ( www-servers/apache[apache2_modules_unixd(+),threads=] ) argon2? ( app-crypt/argon2:= ) - berkdb? ( || ( sys-libs/db:5.3 - sys-libs/db:5.1 - sys-libs/db:4.8 - sys-libs/db:4.7 - sys-libs/db:4.6 - sys-libs/db:4.5 ) ) + berkdb? ( || ( sys-libs/db:5.3 sys-libs/db:4.8 ) ) bzip2? ( app-arch/bzip2:0= ) cdb? ( || ( dev-db/cdb dev-db/tinycdb ) ) coverage? ( dev-util/lcov ) curl? ( >=net-misc/curl-7.10.5 ) enchant? ( =dev-libs/libffi-3.0.11:= ) firebird? ( dev-db/firebird ) - gd? ( >=virtual/jpeg-0-r3:0 media-libs/libpng:0= sys-libs/zlib ) + gd? ( media-libs/libjpeg-turbo:0= media-libs/libpng:0= ) gdbm? ( >=sys-libs/gdbm-1.8.0:0= ) gmp? ( dev-libs/gmp:0= ) iconv? ( virtual/libiconv ) - imap? ( >=virtual/imap-c-client-2[kerberos=,ssl=] ) + imap? ( net-libs/c-client[kerberos=,ssl=] ) intl? ( dev-libs/icu:= ) - iodbc? ( dev-db/libiodbc ) kerberos? ( virtual/krb5 ) - ldap? ( >=net-nds/openldap-1.2.11 ) - ldap-sasl? ( dev-libs/cyrus-sasl >=net-nds/openldap-1.2.11 ) + ldap? ( >=net-nds/openldap-1.2.11:= ) + ldap-sasl? ( dev-libs/cyrus-sasl ) libedit? ( dev-libs/libedit ) lmdb? ( dev-db/lmdb:= ) mssql? ( dev-db/freetds[mssql] ) nls? ( sys-devel/gettext ) - oci8-instant-client? ( dev-db/oracle-instantclient-basic ) - odbc? ( >=dev-db/unixODBC-1.8.13 ) + oci8-instant-client? ( dev-db/oracle-instantclient[sdk] ) + odbc? ( iodbc? ( dev-db/libiodbc ) !iodbc? ( >=dev-db/unixODBC-1.8.13 ) ) postgres? ( dev-db/postgresql:* ) qdbm? ( dev-db/qdbm ) readline? ( sys-libs/readline:0= ) - recode? ( app-text/recode:0= ) session-mm? ( dev-libs/mm ) - simplexml? ( >=dev-libs/libxml2-2.6.8 ) snmp? ( >=net-analyzer/net-snmp-5.2 ) - soap? ( >=dev-libs/libxml2-2.6.8 ) - sodium? ( dev-libs/libsodium:= ) + sodium? ( dev-libs/libsodium:=[-minimal] ) spell? ( >=app-text/aspell-0.50 ) sqlite? ( >=dev-db/sqlite-3.7.6.3 ) - ssl? ( - !libressl? ( dev-libs/openssl:0= ) - libressl? ( dev-libs/libressl:0= ) - ) - tidy? ( || ( app-text/tidy-html5 app-text/htmltidy ) ) + ssl? ( >=dev-libs/openssl-1.0.1:0= =dev-libs/libxml2-2.6.8 ) webp? ( media-libs/libwebp:0= ) - xml? ( >=dev-libs/libxml2-2.6.8 ) - xmlrpc? ( >=dev-libs/libxml2-2.6.8 virtual/libiconv ) - xmlreader? ( >=dev-libs/libxml2-2.6.8 ) - xmlwriter? ( >=dev-libs/libxml2-2.6.8 ) + xml? ( >=dev-libs/libxml2-2.7.6 ) xpm? ( x11-libs/libXpm ) - xslt? ( dev-libs/libxslt >=dev-libs/libxml2-2.6.8 ) - zip? ( sys-libs/zlib:0= ) - zip-encryption? ( >=dev-libs/libzip-1.2.0:= ) - zlib? ( sys-libs/zlib:0= ) + xslt? ( dev-libs/libxslt ) + zip? ( >=dev-libs/libzip-1.2.0:= ) + zlib? ( >=sys-libs/zlib-1.2.0.4:0= ) " RDEPEND="${COMMON_DEPEND} virtual/mta + virtual/libcrypt fpm? ( selinux? ( sec-policy/selinux-phpfpm ) systemd? ( sys-apps/systemd ) )" @@ -124,44 +143,15 @@ DEPEND="${COMMON_DEPEND} BDEPEND="virtual/pkgconfig" -# Without USE=readline or libedit, the interactive "php -a" CLI will hang. -REQUIRED_USE=" - || ( cli cgi fpm apache2 embed phpdbg ) - cli? ( ^^ ( readline libedit ) ) - truetype? ( gd zlib ) - webp? ( gd zlib ) - cjk? ( gd zlib ) - exif? ( gd zlib ) - xpm? ( gd zlib ) - gd? ( zlib ) - simplexml? ( xml ) - soap? ( xml ) - wddx? ( xml ) - xmlrpc? ( || ( xml iconv ) ) - xmlreader? ( xml ) - xslt? ( xml ) - ldap-sasl? ( ldap ) - mhash? ( hash ) - phar? ( hash ) - qdbm? ( !gdbm ) - readline? ( !libedit ) - recode? ( !imap !mysqli !mysql ) - session-mm? ( session !threads ) - mysql? ( hash || ( mysqli pdo ) ) - mysqli? ( hash ) - zip-encryption? ( zip ) -" - -RESTRICT="!test? ( test )" +PHP_MV="$(ver_cut 1)" PATCHES=( - "${FILESDIR}/php-freetype-2.9.1.patch" - "${FILESDIR}/php-7.2.13-intl-use-icu-namespace.patch" - "${FILESDIR}/php-7.2.34-use-after-free-bug76047.patch" + "${FILESDIR}"/php-iodbc-header-location.patch + "${FILESDIR}"/bug81656-gcc-11.patch + "${FILESDIR}"/php-7.4-openssl.patch + "${FILESDIR}"/php-7.4.33-CVE-2022-31631.patch ) -PHP_MV="$(ver_cut 1)" - php_install_ini() { local phpsapi="${1}" @@ -230,20 +220,19 @@ src_prepare() { sapi/fpm/php-fpm.conf.in \ || die 'failed to move the include directory in php-fpm.conf' - # Bug 669566 - necessary so that build tools are updated for commands like pecl - # Force rebuilding aclocal.m4 - rm -f aclocal.m4 || die "failed to remove aclocal.m4 in src_prepare" - eautoreconf + # Emulate buildconf to support cross-compilation + rm -fr aclocal.m4 autom4te.cache config.cache \ + configure main/php_config.h.in || die + eautoconf --force + eautoheader } src_configure() { + filter-lto # bug 855644 + addpredict /usr/share/snmp/mibs/.index #nowarn addpredict /var/lib/net-snmp/mib_indexes #nowarn - # Fix building against >=ICU-68, https://bugs.php.net/80310 - append-cflags -DU_DEFINE_FALSE_AND_TRUE=1 - append-cxxflags -DU_DEFINE_FALSE_AND_TRUE=1 - PHP_DESTDIR="${EPREFIX}/usr/$(get_libdir)/php${SLOT}" # The php-fpm config file wants localstatedir to be ${EPREFIX}/var @@ -256,101 +245,94 @@ src_configure() { --with-libdir="$(get_libdir)" --localstatedir="${EPREFIX}/var" --without-pear + --without-valgrind $(use_enable threads maintainer-zts) ) our_conf+=( $(use_with argon2 password-argon2 "${EPREFIX}/usr") - $(use_enable bcmath bcmath) + $(use_enable bcmath) $(use_with bzip2 bz2 "${EPREFIX}/usr") - $(use_enable calendar calendar) + $(use_enable calendar) $(use_enable coverage gcov) - $(use_enable ctype ctype) - $(use_with curl curl "${EPREFIX}/usr") + $(use_enable ctype) + $(use_with curl) $(use_enable xml dom) - $(use_with enchant enchant "${EPREFIX}/usr") - $(use_enable exif exif) - $(use_enable fileinfo fileinfo) - $(use_enable filter filter) - $(use_enable ftp ftp) + $(use_with enchant) + $(use_enable exif) + $(use_with ffi) + $(use_enable fileinfo) + $(use_enable filter) + $(use_enable ftp) $(use_with nls gettext "${EPREFIX}/usr") $(use_with gmp gmp "${EPREFIX}/usr") - $(use_enable hash hash) $(use_with mhash mhash "${EPREFIX}/usr") $(use_with iconv iconv \ - $(use elibc_glibc || use elibc_musl || use elibc_FreeBSD || echo "${EPREFIX}/usr")) - $(use_enable intl intl) - $(use_enable ipv6 ipv6) - $(use_enable json json) - $(use_with kerberos kerberos "${EPREFIX}/usr") - $(use_enable xml libxml) - $(use_with xml libxml-dir "${EPREFIX}/usr") + $(use elibc_glibc || use elibc_musl || echo "${EPREFIX}/usr")) + $(use_enable intl) + $(use_enable ipv6) + $(use_enable json) + $(use_with kerberos) + $(use_with xml libxml) $(use_enable unicode mbstring) - $(use_with unicode onig "${EPREFIX}/usr") - $(use_with ssl openssl "${EPREFIX}/usr") - $(use_with ssl openssl-dir "${EPREFIX}/usr") - $(use_enable pcntl pcntl) - $(use_enable phar phar) - $(use_enable pdo pdo) - $(use_enable opcache opcache) + $(use_with ssl openssl) + $(use_enable pcntl) + $(use_enable phar) + $(use_enable pdo) + $(use_enable opcache) $(use_with postgres pgsql "${EPREFIX}/usr") - $(use_enable posix posix) + $(use_enable posix) $(use_with spell pspell "${EPREFIX}/usr") - $(use_with recode recode "${EPREFIX}/usr") - $(use_enable simplexml simplexml) + $(use_enable simplexml) $(use_enable sharedmem shmop) $(use_with snmp snmp "${EPREFIX}/usr") - $(use_enable soap soap) - $(use_enable sockets sockets) - $(use_with sodium sodium "${EPREFIX}/usr") - $(use_with sqlite sqlite3 "${EPREFIX}/usr") + $(use_enable soap) + $(use_enable sockets) + $(use_with sodium) + $(use_with sqlite sqlite3) $(use_enable sysvipc sysvmsg) $(use_enable sysvipc sysvsem) $(use_enable sysvipc sysvshm) $(use_with tidy tidy "${EPREFIX}/usr") - $(use_enable tokenizer tokenizer) - $(use_enable wddx wddx) - $(use_enable xml xml) - $(use_enable xmlreader xmlreader) - $(use_enable xmlwriter xmlwriter) - $(use_with xmlrpc xmlrpc) - $(use_with xslt xsl "${EPREFIX}/usr") - $(use_enable zip zip) - $(use_with zip-encryption libzip "${EPREFIX}/usr") + $(use_enable tokenizer) + $(use_enable xml) + $(use_enable xmlreader) + $(use_enable xmlwriter) + $(use_with xmlrpc) + $(use_with xslt xsl) + $(use_with zip) $(use_with zlib zlib "${EPREFIX}/usr") - $(use_enable debug debug) + $(use_enable debug) ) # DBA support if use cdb || use berkdb || use flatfile || use gdbm || use inifile \ || use qdbm || use lmdb || use tokyocabinet ; then - our_conf+=( "--enable-dba${shared}" ) + our_conf+=( "--enable-dba" ) fi # DBA drivers support our_conf+=( - $(use_with cdb cdb) + $(use_with cdb) $(use_with berkdb db4 "${EPREFIX}/usr") - $(use_enable flatfile flatfile) + $(use_enable flatfile) $(use_with gdbm gdbm "${EPREFIX}/usr") - $(use_enable inifile inifile) + $(use_enable inifile) $(use_with qdbm qdbm "${EPREFIX}/usr") + $(use_with tokyocabinet tcadb "${EPREFIX}/usr") $(use_with lmdb lmdb "${EPREFIX}/usr") ) # Support for the GD graphics library our_conf+=( - $(use_with truetype freetype-dir "${EPREFIX}/usr") + $(use_with truetype freetype) $(use_enable cjk gd-jis-conv) - $(use_with gd jpeg-dir "${EPREFIX}/usr") - $(use_with gd png-dir "${EPREFIX}/usr") - $(use_with xpm xpm-dir "${EPREFIX}/usr") + $(use_with gd jpeg) + $(use_with xpm) + $(use_with webp) ) - if use webp; then - our_conf+=( --with-webp-dir="${EPREFIX}/usr" ) - fi # enable gd last, so configure can pick up the previous settings - our_conf+=( $(use_with gd gd) ) + our_conf+=( $(use_enable gd) ) # IMAP support if use imap ; then @@ -360,14 +342,11 @@ src_configure() { ) fi - # Interbase/firebird support - our_conf+=( $(use_with firebird interbase "${EPREFIX}/usr") ) - # LDAP support if use ldap ; then our_conf+=( $(use_with ldap ldap "${EPREFIX}/usr") - $(use_with ldap-sasl ldap-sasl "${EPREFIX}/usr") + $(use_with ldap-sasl) ) fi @@ -383,10 +362,25 @@ src_configure() { fi # ODBC support - our_conf+=( - $(use_with odbc unixODBC "${EPREFIX}/usr") - $(use_with iodbc iodbc "${EPREFIX}/usr") - ) + if use odbc && use iodbc ; then + our_conf+=( + --without-unixODBC + --with-iodbc + $(use_with pdo pdo-odbc "iODBC,${EPREFIX}/usr") + ) + elif use odbc ; then + our_conf+=( + --with-unixODBC="${EPREFIX}/usr" + --without-iodbc + $(use_with pdo pdo-odbc "unixODBC,${EPREFIX}/usr") + ) + else + our_conf+=( + --without-unixODBC + --without-iodbc + --without-pdo-odbc + ) + fi # Oracle support our_conf+=( $(use_with oci8-instant-client oci8) ) @@ -397,9 +391,8 @@ src_configure() { $(use_with mssql pdo-dblib "${EPREFIX}/usr") $(use_with mysql pdo-mysql "${mysqllib}") $(use_with postgres pdo-pgsql) - $(use_with sqlite pdo-sqlite "${EPREFIX}/usr") + $(use_with sqlite pdo-sqlite) $(use_with firebird pdo-firebird "${EPREFIX}/usr") - $(use_with odbc pdo-odbc "unixODBC,${EPREFIX}/usr") $(use_with oci8-instant-client pdo-oci) ) fi @@ -407,29 +400,24 @@ src_configure() { # readline/libedit support our_conf+=( $(use_with readline readline "${EPREFIX}/usr") - $(use_with libedit libedit "${EPREFIX}/usr") + $(use_with libedit) ) # Session support if use session ; then our_conf+=( $(use_with session-mm mm "${EPREFIX}/usr") ) else - our_conf+=( $(use_enable session session) ) + our_conf+=( $(use_enable session) ) fi # Use pic for shared modules such as apache2's mod_php our_conf+=( --with-pic ) # we use the system copy of pcre - # --with-pcre-regex affects ext/pcre - # --with-pcre-dir affects ext/filter and ext/zip - # --with-pcre-valgrind cannot be enabled with system pcre - # Many arches don't support pcre-jit + # --with-external-pcre affects ext/pcre our_conf+=( - --with-pcre-regex="${EPREFIX}/usr" - --with-pcre-dir="${EPREFIX}/usr" - --without-pcre-valgrind - --without-pcre-jit + --with-external-pcre + $(use_with jit pcre-jit) ) # Catch CFLAGS problems @@ -522,7 +510,7 @@ src_install() { addpredict /usr/share/snmp/mibs/.index #nowarn # grab the first SAPI that got built and install common files from there - local first_sapi="",sapi="" + local first_sapi="", sapi="" for sapi in $SAPIS ; do if use $sapi ; then first_sapi=$sapi