Проблема с cabinet.dll (FDI.LIB) - Падает при рекурсии... :(
От: Dreik  
Дата: 22.09.05 14:29
Оценка:
Доброго времени суток.

Незнаю точно куда писать — наверное сюда, т.к. всёравно самые крутые перцы тусуются здесь .

Суть проблемы в следующем.
Использую FDI.LIB, взятый отсюда.

Проблема начинается при использовании библиотеки в рекурсивных алгоритмах.
Грубо говоря если в .cab архиве содержится вложенный .cab архив, он будет распакован рекурсивно.
(На стеке функции распаковки вызываются FDICreate(),FDICopy(),FDIDestroy())
Сразу оговорюсь что тестировал на архивах со вложенность до десяти — всё было нормально.
Но бывают такие архивы на которых библиотека падает. Редко но бывают. (Например VMX86_01.CAB в дистрибутиве IE55)
Падает после возврата из второго уровня вложности внутри FDICopy, причём если покоментировать FDIDestroy() — то всё равботает, никто непадает — норесурсы конечно личатся.

Стек падения выглядит вот таким образом:
scan!DComp_Internal_Match+0x49 [dcomp.c @ 196]
scan!Lz_NextToken+0x5f7 [lz.c @ 671]
scan!DComp_DecompressBlock+0x51 [dcomp.c @ 319]
scan!QDIDecompress+0x3e [qdi.c @ 285]
scan!MDIDecompressGlobal+0xe7 [fdi.c @ 1781]
scan!FDIGetDataBlock+0x9b [fdi.c @ 856]
scan!FDIGetFile+0x9d [fdi.c @ 766]
scan!FDICopy+0x1ea [fdi.c @ 417]  <<-- Вот вызов FDICopy в библиотеку.
scan!cab_archive::unpack_archive+0x2b2


Собственно вопрос то вот в чём:
Использовал ли ктонибудь cabinet.dll или FDI.LIB в подобных рекурсивных алгоритмах ?
И встречался ли кто-нибудь с нестабильностью работы библы ?



22.09.05 22:38: Перенесено модератором из 'C/C++' — Павел Кузнецов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.