LINUX.ORG.RU

Почему может крашится libjpeg-turbo?

 


0

2

Сижу я тут и потихоньку пытаюсь обратно скомпилировать предка Cinelerra - broadcast2000:

https://github.com/Randrianasulu/broadcast2000

С уровнем оптимизации O0 оно даже вроде работает, но крашится в недрах libjpeg-turbo-1.5.3 при попытке декодировать mjpeg yuv422 mov созданный ffmpeg. Свои собственные mjpeg-и кушает нормально.

Интересно, это libjpeg-у буфера недодали? Потому что либа известная, её все используют, отключение именно simd через JSIMD_FORCENONE=1 не помогло.

[Thread 0xf52feb00 (LWP 27205) exited]
decode 1
decode 1 5b48
decode 2 5b48
decode 3 5b48
decode 6 ffd8 ffd8
[New Thread 0xf52feb00 (LWP 27207)]
decompress_field 1
decompress_field 2 0
decompress_field 3

Thread 59 "bcast2000" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf52feb00 (LWP 27207)]
0x081a1881 in jpeg_idct_islow (cinfo=0x83130a4, compptr=0xf4904a24, coef_block=0xf4902050, output_buf=0x832ba60, output_col=0) at jidctint.c:386
386         outptr[0] = range_limit[(int) DESCALE(tmp10 + tmp3,
(gdb) bt full
#0  0x081a1881 in jpeg_idct_islow (cinfo=0x83130a4, compptr=0xf4904a24,
    coef_block=0xf4902050, output_buf=0x832ba60, output_col=0)
    at jidctint.c:386
        tmp0 = 72320
        tmp1 = 205984
        tmp2 = 308256
        tmp3 = 363616
        tmp10 = -6815744
        tmp11 = -6815744
        tmp12 = -6815744
        tmp13 = -6815744
        z1 = -235936
        z2 = 0
        z3 = 308256
        z4 = 205984
        z5 = 308256
        inptr = 0xf4902060
        quantptr = 0xf49051c0
        wsptr = 0xf52fe174
        outptr = 0x0
        range_limit = 0xf4904c50 "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—\230™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэю", 'я' <repeats 73 times>...
--Type <RET> for more, q to quit, c to continue without paging--
        ctr = 2
        workspace = {-832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0, 0,
          -832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0,
          0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0,
          0, -832, 32, 0, 0, 0, 0, 0, 0}
#1  0x08196a15 in decompress_onepass (cinfo=0x83130a4, output_buf=0x8313550)
    at jdcoefct.c:143
        coef = 0xf49054a0
        MCU_col_num = 0
        last_MCU_col = 39
        last_iMCU_row = 29
        blkn = 5
        ci = 1
        xindex = 0
        yindex = 1
        yoffset = 0
        useful_width = 1
        output_ptr = 0x832ba60
        start_col = 0
        output_col = 0
        compptr = 0xf4904a24
        inverse_DCT = 0x81a0f82 <jpeg_idct_islow>
#2  0x081713c4 in jpeg_read_raw_data (cinfo=0x83130a4, data=0x8313550,
--Type <RET> for more, q to quit, c to continue without paging--
    max_lines=480) at jdapistd.c:572
        lines_per_iMCU_row = 16
#3  0x0812c304 in decompress_field ()
No symbol table info available.
#4  0x0812c3c3 in mjpeg_decompress_loop ()
No symbol table info available.
#5  0xf7e19328 in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#6  0xf7955f06 in clone () from /lib/libc.so.6
No symbol table info available.
(gdb)

★★★★

Ответ на: комментарий от fluorite

ну …. а откуда он приходит?

с новейшей libjpeg-turbo-2.1.3 то же самое

Thread 59 "bcast2000" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0xf52feb00 (LWP 3699)]
0x081a8892 in jpeg_idct_islow (cinfo=0x83408e4, compptr=0xf4904a34, coef_block=0xf4902060, output_buf=0x834b8d0, output_col=0) at /home/guest/broadcast2000/quicktime/libjpeg-turbo-1.5.3/jidctint.c:386
386         outptr[0] = range_limit[(int)DESCALE(tmp10 + tmp3,
(gdb) bt full
#0  0x081a8892 in jpeg_idct_islow (cinfo=0x83408e4, compptr=0xf4904a34,
    coef_block=0xf4902060, output_buf=0x834b8d0, output_col=0)
    at /home/guest/broadcast2000/quicktime/libjpeg-turbo-1.5.3/jidctint.c:386
        tmp0 = 72320
        tmp1 = 205984
        tmp2 = 308256
        tmp3 = 363616
        tmp10 = -6815744
        tmp11 = -6815744
        tmp12 = -6815744
        tmp13 = -6815744
        z1 = -235936
        z2 = 0
        z3 = 308256
        z4 = 205984
        z5 = 308256
        inptr = 0xf4902070
        quantptr = 0xf49051d0
        wsptr = 0xf52fe134
        outptr = 0x0
        range_limit = 0xf4904c60 "ЂЃ‚ѓ„…†‡€‰Љ‹ЊЌЋЏђ‘’“”•–—\230™љ›њќћџ ЎўЈ¤Ґ¦§Ё©Є«¬­®Ї°±Ііґµ¶·ё№є»јЅѕїАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэю", 'я' <repeats 73 times>...
--Type <RET> for more, q to quit, c to continue without paging--
        ctr = 0
        workspace = {-832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0, 0,
          -832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0,
          0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0, 0, -832, 32, 0, 0, 0, 0, 0,
          0, -832, 32, 0, 0, 0, 0, 0, 0}
#1  0x0819c79f in decompress_onepass (cinfo=0x83408e4, output_buf=0x8340d90)
    at /home/guest/broadcast2000/quicktime/libjpeg-turbo-1.5.3/jdcoefct.c:144
        coef = 0xf49054c0
        MCU_col_num = 0
        last_MCU_col = 39
        last_iMCU_row = 29
        blkn = 5
        ci = 1
        xindex = 0
        yindex = 1
        yoffset = 0
        useful_width = 1
        output_ptr = 0x834b8d0
        start_col = 0
        output_col = 0
        compptr = 0xf4904a34
        inverse_DCT = 0x81a7f93 <jpeg_idct_islow>
#2  0x08171ed5 in jpeg_read_raw_data (cinfo=0x83408e4, data=0x8340d90,
--Type <RET> for more, q to quit, c to continue without paging--
    max_lines=480)
    at /home/guest/broadcast2000/quicktime/libjpeg-turbo-1.5.3/jdapistd.c:616
        lines_per_iMCU_row = 16
#3  0x0812c524 in decompress_field ()
No symbol table info available.
#4  0x0812c623 in mjpeg_decompress_loop ()
No symbol table info available.
#5  0xf7e19328 in start_thread () from /lib/libpthread.so.0
No symbol table info available.
#6  0xf7955f06 in clone () from /lib/libc.so.6
No symbol table info available.
(gdb)

собрал в том же каталоге, чтобы пути не менять …..

Andrew-R ★★★★
() автор топика
Ответ на: комментарий от Andrew-R

в баге на github-е мне ответили…

https://github.com/libjpeg-turbo/libjpeg-turbo/issues/603

в общем может я памяти отдаю мало. Да, та еще будет адвентюра..

ps: а scan-build на libjpeg-turbo 1.5.3 ругается. Автор говорит у него времени нет плотно заниматься либой. Подавай простой код использующий только libjpeg-turbo. Нда, а я пока так не могу.

Andrew-R ★★★★
() автор топика