Bug 7692

Summary: СБиС++ Электронная отчeтность и документооборот 2.4.25 (демо-версия) падает при запуске
Product: WINE@Etersoft Reporter: Александр Морозов <amorozov>
Component: Запуск ; Отладка ; ИсключенияAssignee: Александр Морозов <amorozov>
Status: CLOSED FIXED QA Contact: Andrey Vusik <night>
Severity: minor    
Priority: P4 CC: kondratyuk, lav, svzhu
Version: 2.0   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 502, 5694    

Description Александр Морозов 2011-09-30 12:03:02 MSK
СБиС++ Электронная отчeтность и документооборот 2.4.25 (демо-версия) падает при запуске. Бутылка buh/sbis/2.4.25 в eterhack.

wine-etersoft-1.3.27-alt1.15
wine-etersoft-sql-1.7.1-alt3
Comment 1 Александр Морозов 2011-09-30 15:36:44 MSK
При падении СБиС создаёт файл .dmp в директории dumps. Этот файл можно открыть с помощью WinDbg и посмотреть бэктрейс командой k. Бэктрейсы получаются разные, но во всех случаях падает при выполнении RtlAllocateHeap.
Comment 2 Александр Морозов 2011-10-03 16:28:37 MSK
Попробовал в некоторых местах принудительно сбрасывать флаг HEAP_NO_SERIALIZE. Не помогло.

С логом +heap запускается очень долго. Ждал 10 минут и так и не дождался.
Comment 3 Александр Морозов 2011-10-04 13:49:14 MSK
В HEAP_FindFreeBlock после выполнения
ARENA_FREE *pArena = LIST_ENTRY( ptr, ARENA_FREE, entry );
в pArena иногда оказывается недействительный указатель.
Comment 4 Александр Морозов 2011-10-05 12:40:29 MSK
> С логом +heap запускается очень долго. Ждал 10 минут и так и не дождался.
Разобрался, в чём тут дело.
Функция heap_set_debug_flags при наличии +heap устанавливает флаги, включающие заполнение разных видов блоков памяти разными числами и дополнительные проверки в функциях HEAP_Validate*.
Comment 5 Александр Морозов 2011-10-05 13:32:53 MSK
Попробовал в RtlAllocateHeap и RtlReAllocateHeap выделять в два раза больше памяти, чем запрашивается. Всё равно падает.
Comment 6 Александр Морозов 2011-10-05 17:02:06 MSK
Проблему можно обойти, если выделять памяти на 4 байта больше и возвращать сдвинутый на этот размер указатель.
Comment 7 Svetlana Zhukova 2011-10-18 15:57:43 MSK
WINE@Etersoft 1.0 SQL 1.3.30/1.7.1-eter1.5/3
Бутылка buh/sbis/2.4.25 в eterhack
Ошибки нет.
Comment 8 Александр Морозов 2011-10-20 19:45:47 MSK
Хак приводит к проблемам с запуском сервисов КриптоПро:

$ ww control
fixme:advapi:RegisterEventSourceW ((null),L"cpcsp"): stub
fixme:advapi:ReportEventW (0xcafe4242,0x0001,0x0000,0xc2610130,(nil),0x0001,0x00000000,0x97e4cc,(nil)): stub
err:eventlog:ReportEventW L"Exception in operation."
fixme:advapi:DeregisterEventSource (0xcafe4242) stub
fixme:advapi:RegisterEventSourceW ((null),L"cpcsp"): stub
fixme:advapi:ReportEventW (0xcafe4242,0x0001,0x0000,0xc2610130,(nil),0x0001,0x00000000,0x97e4cc,(nil)): stub
err:eventlog:ReportEventW L"Exception in DestroyCSProvider."
fixme:advapi:DeregisterEventSource (0xcafe4242) stub
fixme:advapi:RegisterEventSourceW ((null),L"cpcsp"): stub
fixme:advapi:ReportEventW (0xcafe4242,0x0004,0x0000,0x426101f4,(nil),0x0000,0x00000000,(nil),(nil)): stub
fixme:advapi:DeregisterEventSource (0xcafe4242) stub
err:usbhub:initialize_usbhub failed to initialize libusb
Comment 9 Александр Морозов 2011-10-21 16:05:00 MSK
Сделал, чтобы хак работал только для sbis.
Comment 10 Александр Морозов 2011-10-24 21:09:42 MSK
Похоже, что память портится в CryptDecodeObject. Если закомментировать её содержимое и просто возвращать FALSE, то СБиС++ при запуске не падает.
Comment 11 Александр Морозов 2011-10-26 19:54:50 MSK
CryptDecodeObjectEx без CRYPT_DECODE_ALLOC_FLAG и CryptDecodeObject работают неправильно по крайней мере для X509_CERT_POLICIES, а скорее всего, и для многих других структур.
Comment 12 Александр Морозов 2011-10-27 21:09:24 MSK
Занимался данным багом
Comment 13 Александр Морозов 2011-10-28 20:37:52 MSK
CRYPT_AsnDecodeArray, если вызывается без флага CRYPT_DECODE_ALLOC_FLAG, считает, что указатель, по которому будет располагаться декодированный массив структур, проинициализирован. Баг был вызван тем, что этот указатель в ряде случаев не инициализировался.
Comment 14 Andrey Vusik 2011-11-14 17:39:18 MSK
Принято.
Comment 15 Александр Морозов 2011-11-21 20:25:12 MSK
Сделал тест и отправил вместе с патчем в рассылку апстрима.