Bug 29462 - Новую версию PECL GMagick
Summary: Новую версию PECL GMagick
Status: CLOSED FIXED
Alias: None
Product: Branch p7
Classification: Distributions
Component: php5-gmagick (show other bugs)
Version: не указана
Hardware: all Linux
: P3 normal
Assignee: Andrey Cherepanov
QA Contact: qa-p7@altlinux.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2013-10-13 00:58 MSK by Vitaly Lipatov
Modified: 2014-02-27 03:07 MSK (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Vitaly Lipatov 2013-10-13 00:58:29 MSK
На некотором php-коде (при установке CMS) Апач выпадает с ошибкой:

httpd2: magick/semaphore.c:531: LockSemaphoreInfo: Проверочное утверждение «semaphore_info != (SemaphoreInfo *) ((void *)0)» не выполнено.
[Sun Oct 13 00:40:12 2013] [error] child died with signal 6

Нашёл похожую багу:
https://bugzilla.redhat.com/show_bug.cgi?id=751376

На тесте
<?php
$image = new Gmagick();
$svg = file_get_contents('image.svg');
$image->readImageBlob($svg);
$image->write('image.jpg');
echo get_class($image). PHP_EOL;
exit;

(на всякий, тестовый svg брал такой: http://soulibre.ru/images/1/1d/Red_copyright.svg)

получил SegFault:

#0  strlcpy (dst=<optimized out>, src=0x0, siz=<optimized out>) at strlcpy.c:41
#1  0x00007ffff04b8945 in MagickSetImageFilename () from /usr/lib64/libGraphicsMagickWand.so.2
#2  0x00007ffff06e11b2 in zim_gmagick_readimageblob () from /usr/lib64/php/5.3.27/extensions/gmagick.so
#3  0x00007fffeb3c0844 in ?? () from /usr/lib64/php/5.3.27/extensions/suhosin.so
#4  0x00007ffff7a305e6 in ?? () from /usr/lib64/libphp-5.3.27.so.0
#5  0x00007ffff79f08e3 in execute () from /usr/lib64/libphp-5.3.27.so.0
#6  0x00007fffeb3c197b in ?? () from /usr/lib64/php/5.3.27/extensions/suhosin.so
#7  0x00007ffff79cbb79 in zend_execute_scripts () from /usr/lib64/libphp-5.3.27.so.0

 # rpm -qf /usr/lib64/libGraphicsMagickWand.so.2.6.0
libGraphicsMagick-1.3.18-alt1
 # rpm -qf /usr/lib64/php/5.3.27/extensions/gmagick.so
php5-gmagick-5.3.27.20130711-alt0.M70P.1

Правда мне показалось, что это уже другая бага.
Comment 1 Vitaly Lipatov 2013-10-13 01:03:04 MSK
В Сизифе
libGraphicsMagick-1.3.18-alt2
php5-gmagick-5.4.17.20130704-alt1
и бага не воспроизводится.
Comment 2 Vitaly Lipatov 2014-02-23 02:46:02 MSK
Упростил тест:
#!/usr/bin/php
<?php
$image = new Gmagick();
// 1x1 gif
$data = base64_decode('R0lGODlhAQABAIAAAMDAwAAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==');
$image->readImageBlob($data);


Program received signal SIGSEGV, Segmentation fault.
strlcpy (dst=<optimized out>, src=0x0, siz=siz@entry=2053) at strlcpy.c:41
41				if ((*d++ = *s++) == 0)
(gdb) bt
#0  strlcpy (dst=<optimized out>, src=0x0, siz=siz@entry=2053) at strlcpy.c:41
#1  0x00007ffff005feb5 in CopyMagickString (destination=<optimized out>, source=<optimized out>, length=length@entry=2053) at wand/magick_compat.c:76
#2  0x00007ffff006a945 in MagickSetImageFilename (wand=0x8bfc30, filename=<optimized out>) at wand/magick_wand.c:8012
#3  0x00007ffff02931b2 in zim_gmagick_readimageblob (ht=<optimized out>, return_value=0x895178, return_value_ptr=<optimized out>, this_ptr=0x8951c8, 
    return_value_used=<optimized out>) at /usr/src/debug/php5-gmagick-5.3.27.20130711/gmagick_methods.c:3082
#4  0x00007fffec553844 in ?? () from /usr/lib64/php/5.3.27/extensions/suhosin.so
Comment 3 Vitaly Lipatov 2014-02-23 03:06:24 MSK
У меня пакет php5-gmagick-5.3.27.20130711-alt0.M70P.1

Удивляюсь, но я не смог такого тэга сборки в
http://git.altlinux.org/gears/p/php5-gmagick.git?p=php5-gmagick.git;a=shortlog;h=refs/heads/p7

Поэтому не представляю, что предпринять. Перейти на php 5.4 так сразу не могу, он сильно несовместим.
Comment 4 Vitaly Lipatov 2014-02-23 03:23:27 MSK
(gdb) l /usr/src/debug/php5-gmagick-5.3.27.20130711/gmagick_methods.c:3070
3065		if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &image_string, &image_string_len, &filename, &filename_len) == FAILURE) {
3066			return;
3067		}
...
3081		/* Even if filename is null we need to give a name here. Otherwise segfaults will happen */
3082		MagickSetImageFilename(intern->magick_wand, filename);
Я так понимаю, filename предполагается быть заполненным, но этого не случилось

Второй параметр функции не обязателен:
bool Imagick::readImageBlob ( string $image [, string $filename ] )
...
ZEND_BEGIN_ARG_INFO_EX(gmagick_readimageblob_args, 0, 0, 1)
<------>ZEND_ARG_INFO(0, imageContents)
<------>ZEND_ARG_INFO(0, filename)
ZEND_END_ARG_INFO()

http://www.php.net/manual/en/imagick.readimageblob.php

В общем, в новой версии php-gmagick добавлено:
<------>/* Even if filename is null we need to give a name here. Otherwise segfaults will happen */
<------>if (!filename)
<------><------>filename = "";

В качестве обходного варианта можно указывать пустую строку вторым параметром к readImageBlob.

Патч делать к php5-gmagick-5.3..?
Comment 5 Vitaly Lipatov 2014-02-23 03:38:49 MSK
Переименовываю тогда:
У нас тут старая версия PECL GMagick, в которой ошибка в функции readImageBlob() и нет функции getImageBlob();
Чтобы проблемы ушли, надо обновить версию.
Comment 6 Andrey Cherepanov 2014-02-24 10:47:57 MSK
(В ответ на комментарий №5)
> Переименовываю тогда:
> У нас тут старая версия PECL GMagick, в которой ошибка в функции
> readImageBlob() и нет функции getImageBlob();
> Чтобы проблемы ушли, надо обновить версию.
До какой версии? Последней 5.3.x из апстрима?
Comment 7 Vitaly Lipatov 2014-02-25 13:51:48 MSK
(В ответ на комментарий №6)
...> > У нас тут старая версия PECL GMagick, в которой ошибка в функции
...
> > Чтобы проблемы ушли, надо обновить версию.
> До какой версии? Последней 5.3.x из апстрима?
Достаточно до той, которая в Сизифе. Это правильный путь, в Сизифе она уже обкаталась, можно и в p7 перенести.
Comment 8 Repository Robot 2014-02-26 17:20:56 MSK
php5-gmagick-5.3.27.20130711-alt0.M70P.2 -> p7:

* Tue Feb 25 2014 Andrey Cherepanov <cas@altlinux> 5.3.27.20130711-alt0.M70P.2
- Backport new version to p7 (ALT #29462)

* Tue Feb 25 2014 cas <cas@altlinux> 5.3.27.20130711-alt0.M70P.2
- Rebuild with php5-5.3.27.20130711-alt0.M70P.2