ALT Linux Team development discussions
 help / color / mirror / Atom feed
From: Alexey Tourbin <at@altlinux.ru>
To: devel@lists.altlinux.org
Cc: "George V. Kouryachy" <george@altlinux.org>
Subject: [devel] FAILED q-core.git=7.11-alt1 (bad_elf_symbols, ImageMagick)
Date: Tue, 24 Feb 2009 20:16:01 +0300
Message-ID: <20090224171601.GN31985@altlinux.org> (raw)

[-- 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 --]

                 reply	other threads:[~2009-02-24 17:16 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090224171601.GN31985@altlinux.org \
    --to=at@altlinux.ru \
    --cc=devel@lists.altlinux.org \
    --cc=george@altlinux.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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