Укажите отработанное время

Отработанное время:
Продуктивное время:
Bug 1317 - Тест к функции FDICopy()   Make a simular bug
Summary: Тест к функции FDICopy()
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Общее (show other bugs)
Version: 1.0.9
Hardware: PC Linux
: P5 normal
Target Milestone: ---
Assignee: Виталий Перов
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks: 930 7107
  Show dependency treegraph
 
In work:
Reported: 2008-03-07 14:12 MSK by Константин Кондратюк
Modified: 2011-04-07 19:17 MSK (History)
1 user (show)

See Also:
Заявки RT:
Связано с:
Дата напоминания:


Attachments
Пример cab-файла (36 bytes, application/octet-stream)
2010-11-18 03:58 MSK, Константин Кондратюк
Details
дописал тест wine/dlls/cabinet/tests/fdi.c (19.59 KB, application/octet-stream)
2010-11-18 03:58 MSK, Виталий Перов
Details

Note You need to log in before you can comment on or make changes to this bug.
Description Константин Кондратюк 2008-03-07 14:12:42 MSK
Created attachment 295 [details]
Пример cab-файла

Нужен тест к функции FDICopy(), показывающий ошибку определения cab-файла, приложенного в аттаче к баге. 36-байтный cab создать при выполнении теста и проверить его. Точно будут ошибки в определении на наличие файлов и директорий, и в итоге вайн не признает в нём cab-файл, в отличие от windows.
Comment 1 Виталий Перов 2008-03-11 18:16:50 MSK
Если cab-файл пустой:
Выполняется вызов FDICopy(), и где-то внутри (fdi.c:2497) выводится сообщение: "err:cabinet:FDICopy FDIIsCabinet failed."

Если cab-файл не пустой:
Сразу выдаётся ошибка: "wine: Unhandled page fault on execute access to 0x00000000 at address (nil) (thread 0009), starting debugger..."
и запускается дебаггер...
Comment 2 Виталий Перов 2008-03-11 19:11:34 MSK
Created attachment 303 [details]
дописал тест wine/dlls/cabinet/tests/fdi.c

Тест вызывает функцию FDICopy и пытается открыть файл ci-temp0.cab.
Проверяется только возвращаемое значение. В случае FALSE сообщается об ошибке.
Comment 3 Виталий Перов 2008-03-11 19:33:47 MSK
тест неправильный, поторопился
Comment 4 Виталий Перов 2008-03-11 20:04:59 MSK
5-й параметр FDICopy() - PFNFDINOTIFY   pfnfdin
Описание MSDN:
pfnfdin
    A pointer to a file notification function that is called periodically to update the application on the status of the decoder. For more information, see Remarks.

Как я понял, туда надо передавать адрес функции, которая будет показывать статус распаковки.
Я передавал туда NULL.
В итоге, когда cab-файл пустой, эта функция не вызывается, а когда не пустой, то происходит обращение по нулевому адресу.

В wine fdi.c:2511
if (((*pfnfdin)(fdintCABINET_INFO, &fdin))) {
    PFDI_INT(hfdi)->perf->erfOper = FDIERROR_USER_ABORT;
    PFDI_INT(hfdi)->perf->erfType = 0;
    PFDI_INT(hfdi)->perf->fError = TRUE;
    goto bail_and_fail;
  }
функция вызывается в любом случае, даже если pfnfdin=NULL

Надо проверить как в windows.

Думаю в этом месте надо написать проверку, чтобы при pfnfdin==NULL ничего не происходило

Comment 5 Виталий Перов 2008-03-11 20:28:29 MSK
Проверил в windows - функция pfnfdin вызывается в любом случае, даже
если pfnfdin=NULL
Comment 6 Константин Кондратюк 2008-03-11 23:33:20 MSK
Наверное, можно тестовый каб из 36 байт не хранить отдельно, а создавать в ходе выполнения теста, заполнять эти 36 байт, проверять, а потом удалять созданный файл. Получим необходимый нам тест на содержание файлов/директорий, при этом ничего лишнего не таская за собой, кроме одного патча.
Comment 7 Виталий Перов 2008-03-13 18:32:29 MSK
Теперь тестовый cab-файл создаётся в процессе теста.

Патч добавил в:
wine-etersoft-public/patches/check/tests-cabinet-test_FDICopy-empty_cab_file.patch
Comment 8 Виталий Перов 2008-03-17 21:24:25 MSK
Послал патч в winehq - не понравился код.
Переписываю код с использованием WINAPI функций работы с файлами
Comment 9 Виталий Перов 2008-03-17 21:50:08 MSK
Переписал патч. Добавил в CVS
Comment 10 Виталий Перов 2008-03-18 19:59:56 MSK
переписал с использованием assert()