Summary: | модуль cabinet.dll: WINE падает после некорректного вызова FDICopy() | ||
---|---|---|---|
Product: | WINE@Etersoft | Reporter: | Виталий Перов <vitperov> |
Component: | Консоль ; Вызов программ | Assignee: | Виталий Перов <vitperov> |
Status: | CLOSED INVALID | QA Contact: | |
Severity: | minor | ||
Priority: | P5 | CC: | lav |
Version: | unspecified | ||
Target Milestone: | --- | ||
Hardware: | PC | ||
OS: | Linux | ||
Whiteboard: | |||
Заявки RT: | Связано с: | ||
Дата напоминания: | |||
Bug Depends on: | |||
Bug Blocks: | 1217 |
Description
Виталий Перов
2008-03-13 19:29:30 MSK
а дело в том, что вначале функции FDICopy() определено: struct fdi_folder *fol = NULL где-то внутри (fdi.c:2511) происходит вызов функции, которая должна показывать прогресс распаковки. Если она возвратит true, то выполняется код, а в конце стоит goto bail_and_fail; Первая комманда после метки bail_and_fail: switch (fol->comp_type & ..... Здесь и происходит обращение по несуществующему адресу. По-моему простой проверки на правильность указателя *fol не достаточно. Для корректного освобождения памяти надо почти полностью переписывать код после метки bail_and_fail Никакой ошибки нет, просто мы длолжны возвращать указатель на int. Если мы возвращаем FALSE, т.е NULL, то, всё нормально, а если какое-то другое число, то вызывающая функция пытается прочитать по указанному адресу. Память не выделена, возникает ошибка. Только вот странно, почему винда в этом случае нормально реагирует. |