ALT Linux Team development discussions
 help / color / mirror / Atom feed
* [devel] FAILED q-core.git=7.11-alt1 (bad_elf_symbols, ImageMagick)
@ 2009-02-24 17:16 Alexey Tourbin
  0 siblings, 0 replies; only message in thread
From: Alexey Tourbin @ 2009-02-24 17:16 UTC (permalink / raw)
  To: devel; +Cc: George V. Kouryachy

[-- Attachment #1: Type: text/plain, Size: 4824 bytes --]

[#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  }
...

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2009-02-24 17:16 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-02-24 17:16 [devel] FAILED q-core.git=7.11-alt1 (bad_elf_symbols, ImageMagick) Alexey Tourbin

ALT Linux Team development discussions

This inbox may be cloned and mirrored by anyone:

	git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \
		devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru
	public-inbox-index devel

Example config snippet for mirrors.
Newsgroup available over NNTP:
	nntp://lore.altlinux.org/org.altlinux.lists.devel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git