[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