Ошибка ImageMagick: «поврежденный размер против prev_size» в libc.so в Linux - PullRequest
1 голос
/ 14 мая 2019

Я использую imagemagick 7 для чтения и записи некоторых TIFF файлов. У меня есть C++ код, чтобы сделать то же самое, и он отлично работает с Windows. Я сталкиваюсь с этой проблемой при написании файла TIFF в Linux. Я, магемагик, дает сбой при создании ImageMagick Image и записи Image в файл.

Я собрал следы аварии, но, кажется, сложно проанализировать следы.

Я получаю сообщение об ошибке ниже:

*** Error in `TestReadWriteImage': corrupted size vs. prev_size: 0x0000000001ef0430 ***
<br/>
======= Backtrace: ========= <br/>
/lib64/libc.so.6(+0x7f5d4)[0x7f81724b75d4]<br/>
/lib64/libc.so.6(+0x82de4)[0x7f81724bade4]<br/>
/lib64/libc.so.6(+0x8382c)[0x7f81724bb82c]<br/>
/lib64/libc.so.6(realloc+0x1d2)[0x7f81724bd832]<br/>
/lib64/libtiff.so.5(+0xd863)[0x7f816543e863]<br/>
/lib64/libtiff.so.5(TIFFSetField+0x94)[0x7f816543f124]<br/>
/home/data/linux_a64/code/bin/tiff.so(+0x7457)[0x7f81656ac457]<br/>
/home/data/linux_a64/code/bin/libMagickCore-7.Q8HDRI.so.0(WriteImage+0x260)[0x7f8168fc9490]<br/>
/home/data/linux_a64/code/bin/libMagick++-7.Q8HDRI.so.0(_ZN6Magick5Image5writeERKSs+0x43)[0x7f8168d1d853]<br/>


**Sample C++ Code:**<br/>
 *uchar* *pixels; // This variable contains some pixel data* <br/>
  *Magick::Image* *imImage = new Magick::Image(3, 3, "RGB",Magick::CharPixel, pixels);* <br/>
  *imImage->write("/home/tmp/Output.tiff");*

Я получаю сбой за последние 2 инструкции.

Я не уверен, где искать проблему.

Это сбой ImageMagick, libc или libtiff?

Если кто-то сталкивался с такой же проблемой, пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 19 мая 2019

Я не уверен, где искать проблему.

У вас повреждение кучи (скорее всего, из-за более раннего переполнения выделенного буфера кучи).

Стандартный инструмент для поиска таких проблем: Valgrind .

Я собрал следы аварии, но, кажется, сложно проанализировать следы.

Проблема с отладкой повреждения кучи (без специализированных инструментов) состоит в том, что место, где проявляется проблема, часто имеет очень мало общего с местом, где проблема действительно возникает.

...