From 9fabcf3b71e52b929e65cc918b4e4109fbf7f2d1 Mon Sep 17 00:00:00 2001 From: cytopia Date: Sat, 27 Jun 2020 15:52:01 +0200 Subject: [PATCH] Fixes imagick segfault by setting its threads to 1 --- CHANGELOG.md | 1 + Dockerfiles/mods/Dockerfile-5.5 | 21 +++++++++++++++++++++ Dockerfiles/mods/Dockerfile-5.6 | 4 ++++ Dockerfiles/mods/Dockerfile-7.0 | 4 ++++ Dockerfiles/mods/Dockerfile-7.1 | 4 ++++ Dockerfiles/mods/Dockerfile-7.2 | 4 ++++ Dockerfiles/mods/Dockerfile-7.3 | 4 ++++ Dockerfiles/mods/Dockerfile-7.4 | 4 ++++ README.md | 2 +- build/ansible/group_vars/all/mods.yml | 8 +++++++- tests/mods/modules/imagick/imagick-jpeg.php | 4 ++-- tests/mods/modules/imagick/imagick-png.php | 4 ++-- 12 files changed, 58 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index dc75419..3f7a9a5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ #### Fixed - Fixes login to Dockerhub for CI jobs +- Fixes imagick segfault by setting its threads to 1 ## Release 0.106 diff --git a/Dockerfiles/mods/Dockerfile-5.5 b/Dockerfiles/mods/Dockerfile-5.5 index 6cec40c..f20400a 100644 --- a/Dockerfiles/mods/Dockerfile-5.5 +++ b/Dockerfiles/mods/Dockerfile-5.5 @@ -26,6 +26,7 @@ RUN set -eux \ libjpeg-dev \ libkrb5-dev \ libldap2-dev \ + libmagickwand-dev \ libmcrypt-dev \ libmemcached-dev \ libnghttp2-dev \ @@ -41,6 +42,7 @@ RUN set -eux \ libssl-dev \ libtidy-dev \ libvpx-dev \ + libwebp5 \ libxml2-dev \ libxpm-dev \ libxslt-dev \ @@ -194,6 +196,19 @@ RUN set -eux \ && true +# -------------------- Installing PHP Extension: imagick -------------------- +RUN set -eux \ + # Installation: Version specific + # Type: PECL extension + # Default: Pecl command + && pecl install imagick \ + # Enabling + && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ + && true + + # -------------------- Installing PHP Extension: imap -------------------- RUN set -eux \ # Generic pre-command @@ -696,6 +711,7 @@ RUN set -eux \ libfreetype6 \ libicu52 \ libjpeg62-turbo \ + libmagickwand-6.q16-2 \ libmcrypt4 \ libmemcachedutil2 \ libmysqlclient18 \ @@ -708,6 +724,7 @@ RUN set -eux \ libsybdb5 \ libtidy-0.99-0 \ libvpx1 \ + libwebp5 \ libxpm4 \ libxslt1.1 \ libyaml-0-2 \ @@ -722,6 +739,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ @@ -790,6 +809,8 @@ RUN set -eux \ && php-fpm -m | grep -oiE '^iconv$' \ && php -m | grep -oiE '^igbinary$' \ && php-fpm -m | grep -oiE '^igbinary$' \ + && php -m | grep -oiE '^imagick$' \ + && php-fpm -m | grep -oiE '^imagick$' \ && php -m | grep -oiE '^imap$' \ && php-fpm -m | grep -oiE '^imap$' \ && php -m | grep -oiE '^interbase$' \ diff --git a/Dockerfiles/mods/Dockerfile-5.6 b/Dockerfiles/mods/Dockerfile-5.6 index 98a4154..7b68d3d 100644 --- a/Dockerfiles/mods/Dockerfile-5.6 +++ b/Dockerfiles/mods/Dockerfile-5.6 @@ -220,6 +220,8 @@ RUN set -eux \ && pecl install imagick \ # Enabling && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ && true @@ -754,6 +756,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ diff --git a/Dockerfiles/mods/Dockerfile-7.0 b/Dockerfiles/mods/Dockerfile-7.0 index 55ce268..649e3af 100644 --- a/Dockerfiles/mods/Dockerfile-7.0 +++ b/Dockerfiles/mods/Dockerfile-7.0 @@ -222,6 +222,8 @@ RUN set -eux \ && pecl install imagick \ # Enabling && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ && true @@ -801,6 +803,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ diff --git a/Dockerfiles/mods/Dockerfile-7.1 b/Dockerfiles/mods/Dockerfile-7.1 index 68b3a74..5b963b5 100644 --- a/Dockerfiles/mods/Dockerfile-7.1 +++ b/Dockerfiles/mods/Dockerfile-7.1 @@ -222,6 +222,8 @@ RUN set -eux \ && pecl install imagick \ # Enabling && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ && true @@ -811,6 +813,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ diff --git a/Dockerfiles/mods/Dockerfile-7.2 b/Dockerfiles/mods/Dockerfile-7.2 index 3891092..1094664 100644 --- a/Dockerfiles/mods/Dockerfile-7.2 +++ b/Dockerfiles/mods/Dockerfile-7.2 @@ -222,6 +222,8 @@ RUN set -eux \ && pecl install imagick \ # Enabling && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ && true @@ -815,6 +817,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ diff --git a/Dockerfiles/mods/Dockerfile-7.3 b/Dockerfiles/mods/Dockerfile-7.3 index bcb405b..fdd34c7 100644 --- a/Dockerfiles/mods/Dockerfile-7.3 +++ b/Dockerfiles/mods/Dockerfile-7.3 @@ -222,6 +222,8 @@ RUN set -eux \ && pecl install imagick \ # Enabling && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ && true @@ -815,6 +817,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ diff --git a/Dockerfiles/mods/Dockerfile-7.4 b/Dockerfiles/mods/Dockerfile-7.4 index c75a027..b711b1f 100644 --- a/Dockerfiles/mods/Dockerfile-7.4 +++ b/Dockerfiles/mods/Dockerfile-7.4 @@ -219,6 +219,8 @@ RUN set -eux \ && pecl install imagick \ # Enabling && docker-php-ext-enable imagick \ + # Generic post-command + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ && true @@ -754,6 +756,8 @@ RUN set -eux \ ### Post Install ### RUN set -eux \ + # ---------- imagick ---------- + && sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml \ # ---------- oci8 ---------- && ORACLE_HREF="$( curl -sS https://yum.oracle.com/repo/OracleLinux/OL7/oracle/instantclient/x86_64/ | tac | tac | grep -Eo 'href="getPackage/oracle-instantclient.+basiclite.+rpm"' | tail -1 )" \ && ORACLE_VERSION_MAJOR="$( echo "${ORACLE_HREF}" | grep -Eo 'instantclient[.0-9]+' | sed 's/instantclient//g' )" \ diff --git a/README.md b/README.md index 17c278d..d8ad2a7 100644 --- a/README.md +++ b/README.md @@ -617,7 +617,7 @@ Check out this table to see which Docker image provides what PHP modules. 5.5 Core, ctype, curl, date, dom, ereg, fileinfo, filter, ftp, hash, iconv, json, libxml, mbstring, mysqlnd, openssl, pcre, PDO, pdo_sqlite, Phar, posix, readline, Reflection, session, SimpleXML, SPL, sqlite3, standard, tokenizer, xml, xmlreader, xmlwriter, zlib - amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, psr, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, yaml, Zend OPcache, zip, zlib + amqp, apc, apcu, bcmath, bz2, calendar, Core, ctype, curl, date, dba, dom, enchant, ereg, exif, fileinfo, filter, ftp, gd, gettext, gmp, hash, iconv, igbinary, imagick, imap, interbase, intl, ioncube, json, ldap, libxml, mbstring, mcrypt, memcache, memcached, mongo, mongodb, msgpack, mysql, mysqli, mysqlnd, OAuth, oci8, openssl, pcntl, pcre, PDO, pdo_dblib, PDO_Firebird, pdo_mysql, pdo_pgsql, pdo_sqlite, pgsql, phalcon, Phar, posix, pspell, psr, rdkafka, readline, recode, redis, Reflection, session, shmop, SimpleXML, snmp, soap, sockets, SPL, sqlite3, standard, swoole, sysvmsg, sysvsem, sysvshm, tidy, tokenizer, uploadprogress, wddx, xdebug, xml, xmlreader, xmlrpc, xmlwriter, xsl, yaml, Zend OPcache, zip, zlib 5.6 diff --git a/build/ansible/group_vars/all/mods.yml b/build/ansible/group_vars/all/mods.yml index 33a553d..c6e24a3 100644 --- a/build/ansible/group_vars/all/mods.yml +++ b/build/ansible/group_vars/all/mods.yml @@ -343,7 +343,11 @@ extensions_available: all: type: pecl imagick: - disabled: [5.2, 5.3, 5.4, 5.5, 8.0] # 5.3, 5.4 and 5.5 segfaults + disabled: [5.2, 5.3, 5.4, 8.0] # Only available since 5.3. 5.3 and 5.4 segfaults + 5.5: + type: pecl + build_dep: [libmagickwand-dev, libwebp5] + run_dep: [libmagickwand-6.q16-2, libwebp5] 5.6: type: pecl run_dep: [libmagickwand-6.q16-3, libwebp6] @@ -354,6 +358,8 @@ extensions_available: type: pecl build_dep: [libmagickwand-dev, libwebp6] run_dep: [libmagickwand-6.q16-6, libwebp-dev] + # https://bugs.php.net/bug.php?id=77683 + post: sed -i'' 's|.*"thread".*| |g' /etc/ImageMagick-6/policy.xml imap: disabled: [7.4, 8.0] # TODO: re-enable. currently fails with: configure: error: OpenSSL libraries not found. all: diff --git a/tests/mods/modules/imagick/imagick-jpeg.php b/tests/mods/modules/imagick/imagick-jpeg.php index aea7b79..dd5b4b9 100644 --- a/tests/mods/modules/imagick/imagick-jpeg.php +++ b/tests/mods/modules/imagick/imagick-jpeg.php @@ -9,8 +9,8 @@ error_reporting(-1); $PHP_VERSION = str_replace('-dev', '', PHP_VERSION); -// Only available since 5.3.0 (PHP 5.3, 5.4 and 5.5 segfaults) -if (version_compare($PHP_VERSION, '5.6.0', '<')) { +// Only available since 5.3.0 (PHP 5.3 and 5.4 segfaults) +if (version_compare($PHP_VERSION, '5.5.0', '<')) { echo 'SKIP'; exit(0); } diff --git a/tests/mods/modules/imagick/imagick-png.php b/tests/mods/modules/imagick/imagick-png.php index 86956b2..e1651ef 100644 --- a/tests/mods/modules/imagick/imagick-png.php +++ b/tests/mods/modules/imagick/imagick-png.php @@ -9,8 +9,8 @@ error_reporting(-1); $PHP_VERSION = str_replace('-dev', '', PHP_VERSION); -// Only available since 5.3.0 (PHP 5.3, 5.4 and 5.5 segfaults) -if (version_compare($PHP_VERSION, '5.6.0', '<')) { +// Only available since 5.3.0 (PHP 5.3 and 5.4 segfaults) +if (version_compare($PHP_VERSION, '5.5.0', '<')) { echo 'SKIP'; exit(0); }