Bug 1792

Summary: Конструктор сайтов Не работает публикация в интернете
Product: Wine School Reporter: Денис Баранов <baraka>
Component: Конструктор сайтовAssignee: BUGS@Etersoft <bugs>
Status: DEFERRED --- QA Contact:
Severity: normal    
Priority: P3 CC: lav
Version: 0.7   
Target Milestone: ---   
Hardware: PC   
OS: Linux   
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 1973    
Bug Blocks: 2585, 1527, 1530    
Attachments: скрин

Description Денис Баранов 2008-05-07 20:45:59 MSD
При выборе меню "Публикация в интернет"окрывается FTP клиент в котором можно настраивать ftp сервер, но при попытке сохранить изменения вылетает ошибка.
Comment 1 Денис Баранов 2008-05-07 21:46:00 MSD
В настройках программы есть два вида ftp клиентов: встроенный, встроенный (предидущая версия).
Эти клиенты можно запустить так из каталога: ftp.exe и ftp1.exe.
ftp.exe не работает, требует установленный моно
ftp1.exe работает, но если в расширенным режиме попытаться внести изменения в настройки подключения, то вываливается ошибка см. на скрине

Бутылка: e-publis_no_dot
Comment 2 Денис Баранов 2008-05-07 21:46:23 MSD
Created attachment 433 [details]
скрин
Comment 3 Виталий Перов 2008-06-26 11:54:55 MSD
Окно с выбором фтп как в обычном, так и в расширенном режиме одно и то же, странно, почему в обычном всё работает, а в расширенном - нет.

последние сообщения в консоле:
fixme:ole:OleLoadPictureEx (0xaa6754,0,0,{7bf80980-bf32-101a-8bbb-00aa00300cab},x=16,y=16,f=0,0x1419b00), partially implemented.
fixme:ole:OLEPictureImpl_SaveAsFile (0x14112f8)->(0x141a9b8, 0, (nil)), hacked stub.
fixme:ole:OLEPictureImpl_FindConnectionPoint no connection point for {33ad4f92-6699-11cf-b70c-00aa0060d393}

притом самое последнее повторяется 16 раз.
Comment 4 Виталий Перов 2008-06-26 12:57:59 MSD
> Окно с выбором фтп как в обычном, так и в
> расширенном режиме одно и то же
Ошибся: окна разные но похожее

Если подключится к процессу отладчиком, можно поймать исключение. Оно возникает сразу после трейса:
fixme:ole:OLEPictureImpl_SaveAsFile (0x140fca0)->(0x14199c0, 0, (nil)), hacked stub.

Comment 5 Виталий Перов 2008-06-26 13:54:27 MSD
в этом месте выполняется:
return IStream_Write(pstream,This->data,This->datalen,(ULONG*)pcbSize);
при этом This->datalen = 0 !

IStream_Write определено как:
#define IStream_Write(This,pv,cb,pcbWritten) (This)->lpVtbl->Write(This,pv,cb,pcbWritten)

Но интерфейс OLEPictureImpl не имеет метода Write.
OLEPictureImpl наследуется от интерфейса IUnknown, тоторый тоже не имеет метода Write

Но, как ни странно, но IStream_Write всё-таки вызывается, и возвращает S_OK.
Comment 6 Виталий Перов 2008-06-26 14:58:28 MSD
используется Write интерфейса IStream. А он наследует этот метод от ISequentialStream.
В итоге вызывается HGLOBALStreamImpl_Write
Comment 7 Виталий Перов 2008-06-26 18:31:19 MSD
Не совсем понятно зачем ftp клиенту понадобилось создавать изображение в памяти, а потом его ещё и сохранять на диск.

функция OLEPictureImpl_SaveAsFile работает вполне нормально. Ей передаётся входной поток, но она в него ничего не пишет т.к изображение пустое This->datalen = 0

Возможно картинка неверно создаётся до этого.
функция OleLoadPictureEx должно создавать новое изображение и инициализировать его из входного потока. Но она реализована частично, и умеет только создавать новое изображение.

Comment 8 Виталий Перов 2008-06-27 14:35:00 MSD
Проверил:
функци OleLoadPictureEx создаёт и инициализирует изображение из потока.
функция OLEPictureImpl_SaveAsFile получает нормальное изображение и пишет его в требуемый поток.
Возможно причина в том, что она должна писать данные в поток во внешнем формате (gif,bmp,ico...) а пишет она просто This->data.
Надо выяснить в каком формате хранится This->data
Comment 9 Виталий Перов 2008-06-27 15:01:06 MSD
переменная keepOrigFormat=TRUE; loadtime_format = 0;
Такие значения присваиваюст в конструкторе OLEPictureImpl_Construct.

в трейсе видно, что после создание, загружается GIF -изоборажение
trace:ole:OLEPictureImpl_Construct returning 0x141cb58
trace:ole:OLEPictureImpl_QueryInterface (0x141cb58)->({7bf80980-bf32-101a-8bbb-00aa00300cab}, 0x32ba1c)
trace:ole:OLEPictureImpl_AddRef (0x141cb58)->(ref before=1)
trace:ole:OLEPictureImpl_Release (0x141cb58)->(ref before=2)
trace:ole:OLEPictureImpl_QueryInterface (0x141cb58)->({00000109-0000-0000-c000-000000000046}, 0x32ba20)
trace:ole:OLEPictureImpl_AddRef (0x141cb58)->(ref before=1)
fixme:ole:OleLoadPictureEx Data = (nil)  datalen = 0
trace:ole:OLEPictureImpl_Load (0x141cb58,0xaba704)
trace:ole:OLEPictureImpl_LoadGif screen height 16, width 16
trace:ole:OLEPictureImpl_LoadGif color res 3, backgcolor 255
trace:ole:OLEPictureImpl_LoadGif imgcnt 1
trace:ole:OLEPictureImpl_LoadGif curimage: 16 x 16, on 0x0, interlace 64
trace:ole:OLEPictureImpl_SetBitmap bitmap handle 0x6394

вероятно при этом должно менятся значение loadtime_format
Comment 10 Виталий Перов 2008-06-28 12:49:22 MSD
Исключения возникает после OLEPictureImpl_SaveAsFile. Функции передаётся изображение, имеющее формат иконы

В этом случае loadtime_format=0. Т.к:
This->loadtime_format = magic;
magic - это первые 2 бита данных. В случае иконы они нулевые.
Не уверен, что в Windows loadtime_format в этом случае 0
Comment 11 Виталий Перов 2008-06-28 13:55:55 MSD
Возможно виновато именно окно расширенных настроек.
При нажатии на кнопку "Изменить", находясь при этом в обычном режиме. Происходит обработка того же файла иконы. Его можно узнать по длине datalen=6006.
При этом никаких ошибок не возникает.

Ещё попутно заметил, что при закрытии окна расширенных настроек программа не завершается, приходится принудительно завершать процесс.

Возможно программа в одном случае проверяет результат выполнения OLEPictureImpl_SaveAsFile, а в другом - нет.

Проблема именно в функции OLEPictureImpl_SaveAsFile. 
Если, например, вернуть S_OK, при этом не производя запись в выходной поток, то появляется совершенно другое сообщение об ошибке.

Скорее всего программа проверяет записанные данные.
Но почему в одном случае она это делает, а в другом - нет?
Comment 12 Виталий Перов 2008-06-28 16:16:18 MSD
>Проблема именно в функции OLEPictureImpl_SaveAsFile. 
>Если, например, вернуть S_OK, при этом не
>производя запись в выходной поток, то
>появляется совершенно другое сообщение об
>ошибке.

Сейчас такого добится не получается. Программа всегда выдаёт одну и ту же ошибку.

Заметил интересный факт: если закрывать расширенные настройки через меню "Выход", то всё программа не повисает. Если же нажимать щёлкать по крестику вверхнем правом, то окно исчезает, а поток остаётся висеть.


Думаю, что дело здесь не в OLEPictureImpl_SaveAsFile, а в окне расширенных настроек: без него те же самые функции работают без проблем!
Comment 13 Виталий Перов 2008-07-06 13:36:24 MSD
Если всё-таки изменять настройки не в расширенном диалоге, то программа вроде как работает.
Коннектится к фтп, передаёт файлы.
Только не работает навигация по фтп (справа). Там отображается только директория ".."
Поэтому файлы закачиваются только в корень фтп, и в дереве никак не отображаются.
Аналогичная навигация по локальным папкам (слева) прекрасно работает.
Comment 14 Виталий Перов 2008-11-01 19:27:42 MSK
Результаты тестирования на новых исходниках:
При нажатии на кнопку "Расширенный режим" окно пропадает, через некоторое время появляется сообщение об ошибке:
Run-time error '76': Path not found
при этом в консоле:
fixme:mpr:WNetGetConnectionW Don't know how to convert L"\\var\\ftp\\pvt" to an unc
Такое сообщение было и раньше, но раньше окно расширенных настроек появлялось, а теперь - нет. 

Установка IE ничего не меняет
Comment 15 Vitaly Lipatov 2012-01-18 03:11:18 MSK
Откладываем, bugs@ в ближайшее время делать ничего не будет.