[devel] FAILED q-core.git=7.11-alt1 (bad_elf_symbols, ImageMagick)
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Вт Фев 24 20:16:01 MSK 2009
[#1435] FAILED q-core.git=7.11-alt1
http://lists.altlinux.org/pipermail/sisyphus-incominger/2009-February/225763.html
[#1524] FAILED q-core.git=7.11-alt1
http://lists.altlinux.org/pipermail/sisyphus-incominger/2009-February/225839.html
i586: NEW bad_elf_symbols detected:
q-core-7.11-alt1.i586.rpm /usr/lib/q/magick.so U ScaleQuantumToShort
q-core-7.11-alt1.i586.rpm /usr/lib/q/magick.so U ScaleShortToQuantum
i586: old bad_elf_symbols resolved:
transcode-1.0.7-alt2.i586.rpm /usr/lib/transcode/import_xml.so U filetype
x86_64: NEW bad_elf_symbols detected:
q-core-7.11-alt1.x86_64.rpm /usr/lib64/q/magick.so U ScaleQuantumToShort
q-core-7.11-alt1.x86_64.rpm /usr/lib64/q/magick.so U ScaleShortToQuantum
x86_64: old bad_elf_symbols resolved:
transcode-1.0.7-alt2.x86_64.rpm /usr/lib64/transcode/import_xml.so U filetype
2009-Feb-24 17:56:15 :: ELF symbols check FAILED
Эта диагностика означает следующее. В файле /usr/lib64/q/magick.so
содержится вызов функций ScaleQuantumToShort и ScaleShortToQuantum.
Эти функции нигде не определены. Следовательно, при определенных code
paths (то есть при определенных условиях выполнения программы) это
приводит к падению приложения; а при некоторых других условиях
приложение упадёт ASAP -- может быть, даже не загрузится.
(С "filetype" дело обстоит несколько сложнее, но "filetype" не влияет
на результат проверки, поскольку не находится в секции "NEW".)
Посмотрим на лог сборки пакета
http://git.altlinux.org/tasks/1524/build/1/x86_64/log
magick.c: In function 'get_pixels':
magick.c:781: warning: implicit declaration of function 'ScaleQuantumToShort'
magick.c: In function 'set_pixels':
magick.c:810: warning: implicit declaration of function 'ScaleShortToQuantum'
verify-elf: WARNING: ./usr/lib64/q/magick.so: undefined symbol: ScaleShortToQuantum
verify-elf: WARNING: ./usr/lib64/q/magick.so: undefined symbol: ScaleQuantumToShort
В логе сборки дважды выводятся те же самые по сути предупреждения,
которые потом перехватываются проверкой bad_elf_symbols. Все эти
проверки работают на разных уровнях: на уровне компиляции исходника,
на уровне локальной проверки файла с помощью ldd, в конце на уровне
глобальной проверки разрешимости символов. Результат одинаковый:
нет таких функций.
Вот часть исходника.
Здесь что-то не так с ImageMagick API.
q-7.11/modules/magick/magick.c:
...
68 #if MagickLibVersion < 0x550
69 #define ScaleQuantumToChar(quantum) Downscale(quantum)
70 #define PixelIntensityToQuantum(color) Intensity(color)
71 #define RLECompression RunlengthEncodedCompression
72 #define ScaleCharToQuantum(value) Upscale(value)
73 #define ScaleShortToQuantum(value) XDownscale(value)
74 #define ScaleQuantumToShort(quantum) XUpscale(quantum)
75 #endif
...
465 static void get_pixels(unsigned char *dest, PixelPacket *source,
466 unsigned long count, unsigned matte)
467 {
468 unsigned long i;
469 register PixelPacket *p;
470 register unsigned short *q;
471
472 p = source;
473 q = (unsigned short*)dest;
474 if (matte)
475 for (i = 0; i < count; i++) {
476 *q++=ScaleQuantumToShort(p->red);
477 *q++=ScaleQuantumToShort(p->green);
478 *q++=ScaleQuantumToShort(p->blue);
479 *q++=ScaleQuantumToShort(MaxRGB-p->opacity);
480 p++;
481 }
482 else
483 for (i = 0; i < count; i++) {
484 *q++=ScaleQuantumToShort(p->red);
485 *q++=ScaleQuantumToShort(p->green);
486 *q++=ScaleQuantumToShort(p->blue);
487 *q++=ScaleQuantumToShort(MaxRGB);
488 p++;
489 }
490 }
491
492 /* Write RGBA pixels to a buffer. */
493
494 static void set_pixels(PixelPacket *dest, unsigned char *source,
495 unsigned long count, unsigned matte)
496 {
497 unsigned long i;
498 register unsigned short *p;
499 register PixelPacket *q;
500
501 p = (unsigned short*)source;
502 q = dest;
503 if (matte)
504 for (i = 0; i < count; i++) {
505 q->red=ScaleShortToQuantum(*p++);
506 q->green=ScaleShortToQuantum(*p++);
507 q->blue=ScaleShortToQuantum(*p++);
508 q->opacity=ScaleShortToQuantum(0xffff-*p++);
509 q++;
510 }
511 else
512 for (i = 0; i < count; i++) {
513 q->red=ScaleShortToQuantum(*p++);
514 q->green=ScaleShortToQuantum(*p++);
515 q->blue=ScaleShortToQuantum(*p++);
516 p++;
517 q++;
518 }
519 }
...
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 197 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20090224/067fda8a/attachment.bin>
Подробная информация о списке рассылки Devel