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

Отработанное время:
Продуктивное время:
Bug 2942 - 1С 8.0: падает при открытии html-ной заставки-приветствия   Make a simular bug
Summary: 1С 8.0: падает при открытии html-ной заставки-приветствия
Status: CLOSED FIXED
Alias: None
Product: WINE@Etersoft
Classification: Продукты (Products)
Component: Internet Explorer / Gecko (show other bugs)
Version: 1.0.9
Hardware: PC All
: P2 major
Target Milestone: ---
Assignee: Константин Кондратюк
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on: 1902
Blocks: 437 1217
  Show dependency treegraph
 
In work:
Reported: 2008-11-18 13:40 MSK by Константин Кондратюк
Modified: 2011-05-25 18:54 MSK (History)
5 users (show)

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


Attachments
лог по html (175.74 KB, text/plain)
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-11-18 13:40:35 MSK
1С 8.0 бухгалтерия базовая
Воспроизведено в бутылке 1c80base на euclid'е

fixme:mshtml:HTMLDocument_QueryInterface (0x6c59178)->({00000003-0000-0000-c000-000000000046} 0x32d398) interface not supported
fixme:shdocvw:WebBrowser_QueryInterface (0x68ee660)->({00000003-0000-0000-c000-000000000046} 0x32d3b8) interface not supported
fixme:mshtml:HlinkTarget_SetBrowseContext (0x6c59178)->((nil))
wine: Unhandled page fault on read access to 0x00000000 at address 0x1cc09e56 (thread 0028), starting debugger...
...
=>1 0x1cc09e56 in html (+0x49e56) (0x0032e3b4)
  2 0x7d9410c0 set_parsecomplete+0x28f(doc=0x6c68dc8) [/srv/kondratyuk/Projects/wine/dlls/mshtml/task.c:295] in mshtml (0x0032e414)
  3 0x7d9413f9 process_task+0x54(task=0x6c941a0) [/srv/kondratyuk/Projects/wine/dlls/mshtml/task.c:356] in mshtml (0x0032e454)
  4 0x7d941777 hidden_proc+0x43(hwnd=0x30066, msg=32776, wParam=0, lParam=0) [/srv/kondratyuk/Projects/wine/dlls/mshtml/task.c:431] in mshtml (0x0032e4a4)
  5 0x7e9b9daa WINPROC_wrapper+0x1a() in user32 (0x0032e4d4)
Comment 1 Константин Кондратюк 2008-11-18 17:01:40 MSK
Падение при исполнении этой функции:
void call_property_onchanged(ConnectionPoint *This, DISPID dispid)
{
    DWORD i;

    for(i=0; i<This->sinks_size; i++) {
        if(This->sinks[i].propnotif)
        {
            FIXME("%p %d\n", This->sinks[i].propnotif, dispid);
            IPropertyNotifySink_OnChanged(This->sinks[i].propnotif, dispid);
        }
    }
}

Вызов IPropertyNotifySink_OnChanged приводит к падению.
Comment 2 Константин Кондратюк 2008-11-18 17:17:22 MSK
При простом отключении выполнения проблемной строки - грузится и отображается нормально. Но как только становится активным окном - сразу же сваливается.
=>1 0x1cc0e382 in html (+0x4e382) (0x0032e914)
  2 0x11ea2937 in bsl (+0x32937) (0x0032e9d0)
  3 0x11ea2cba in bsl (+0x32cba) (0x0032ea64)

Непосредственно перед падением - множество неудачных попыток получить IMarshal.
С патчем на заглушки к IMarshal всё ещё хуже - либо неправильный патч, либо ведёт в более проблемную зону...
Comment 3 Константин Кондратюк 2009-01-21 14:39:36 MSK
Есть подозрение, что на этот раз падает после этого QI:

warn:mshtml:HTMLDOMNode_QI (0x28a4d40)->({3050f1ff-98b5-11cf-bb82-00aa00bdce0b} 0x32e218)

"Неизвестный" интерфейс: IHTMLElement={3050F1FF-98B5-11CF-BB82-00AA00BDCE0B}
Comment 4 Константин Кондратюк 2009-01-21 15:15:58 MSK
Нет, к этому QI обращается не всегда. А вот падает - всегда. Из чего можно слелать вывод, что причина кроется в другом.
Comment 5 Константин Кондратюк 2009-02-10 12:22:58 MSK
Created attachment 1055 [details]
лог по html
Comment 6 Константин Кондратюк 2009-02-10 13:48:06 MSK
Последний лог может не иметь отношение к проблеме. Это использование нового gecko наверняка дало такое падения. С этой проблемой стоит разбираться отдельно.
Comment 7 Константин Кондратюк 2009-02-26 17:55:55 MSK
Очень похоже, что падение происходит опять где-то тут: 
fixme:mshtml:HTMLElement_get_outerHTML (0x2c67588)->(0x32dcb8)

Такое уже было в баге #1902 и для 1.0.9 вылечилось простой инициализацией возвращаемой строки. Фикс есть в 1.0.10, но тем не менее падает.

Наверное, стоит отключить эту правку и посмотреть на поведение 1С
Comment 8 Константин Кондратюк 2009-02-26 18:25:53 MSK
Нет, как минимум, 1cfile не падает с правкой, но падает без неё. Значит, она работает и на новых исходниках. Но вот то, что обычного пробела не хватает - это очень может быть...
Comment 9 Константин Кондратюк 2009-02-27 12:19:02 MSK
Падение происходит в клиентской части, после вызова IPropertyNotifySink_OnChanged с dispid==DISPID_READYSTATE
Сам вызов происходит из вайновской функции call_property_onchanged()
Comment 10 Константин Кондратюк 2009-02-27 13:02:25 MSK
Для проверки отключил уведоления о READYSTATE
Падает теперь дальше.

warn:mshtml:HTMLDOMNode_QI (0x2ae3ea8)->({3050f1ff-98b5-11cf-bb82-00aa00bdce0b} 0x32d6a0)
Это получение IHTMLElement, падение после неудачного вызова этой функции - уже привычное дело.
Comment 11 Константин Кондратюк 2009-02-27 16:33:21 MSK
Да, попытки копать в сторону QI дают результат.
Единственная проблема - корректно через HTMLDOMNode получить объект IHTMLElement.

Вопрос, актуальный для всех встречаемых в QI ...Element-объектов (см. багу #3484)
Comment 12 Денис Баранов 2009-03-01 18:43:57 MSK
Сейчас проблема воспроизводится на новой сборке 1.0.10 alt10/alt6 с новым Gecko
Comment 13 Константин Кондратюк 2009-04-07 13:51:38 MSD
(In reply to comment #10)
> warn:mshtml:HTMLDOMNode_QI (0x2ae3ea8)->({3050f1ff-98b5-11cf-bb82-00aa00bdce0b}
> 0x32d6a0)
> Это получение IHTMLElement

Нужно посмотреть раньше по трейсам. IHTMLElement должен возвращаться до вызова HTMLDOMNode (это как бы страховочный вариант,а так все *Element должны обрабатываться раньше), хотя бы из HTMLElement_QI:
    }else if(IsEqualGUID(&IID_IHTMLElement, riid)) {
        TRACE("(%p)->(IID_IHTMLElement %p)\n", This, ppv);
        *ppv = HTMLELEM(This);
Comment 14 Константин Кондратюк 2009-04-07 14:27:26 MSD
Собственно, проблема с IHTMLElement перестала воспроизводиться.

Единственная проблема, из-за которой падаем - использование функции IPropertyNotifySink_OnChanged() с передачей в неё DISPID_READYSTATE

Отключение вызова через проверку на dispid исключает падения, но неизвестно, к каким проблемам может привести в будущем. Могу сделать хак к релизу:
     for(i=0; i<This->sinks_size; i++) {
-        if(This->sinks[i].propnotif)
+        if(This->sinks[i].propnotif && dispid != DISPID_READYSTATE)
             IPropertyNotifySink_OnChanged(This->sinks[i].propnotif, dispid);
     }
Comment 15 Константин Кондратюк 2009-04-07 14:42:28 MSD
commit 357011ee2ee831cd80e5bacac50484c1dd1eb06b
Author: Konstantin Kondratyuk <kondratyuk@etersoft.ru>
Date:   Tue Apr 7 14:36:09 2009 +0400

    mshtml: Turn off notifies for DISPID_READYSTATE (eterbug #2942)

Видимо, FIXED. Будем надеяться, что в наших сборках не появится ряд глюков gecko из-за отключенных уведомлений.
Comment 16 Александр Морозов 2011-05-25 18:54:28 MSK
>     mshtml: Turn off notifies for DISPID_READYSTATE (eterbug #2942)

Патч вызывает зависание теста для dom в mshtml.