Bug 2258

Summary: Wine аварийно завершает работу при вставке из буфера обмена
Product: WINE@Etersoft Reporter: Alexeev Alexey <alexeev>
Component: ОбщееAssignee: Денис Баранов <baraka>
Status: CLOSED FIXED QA Contact:
Severity: minor    
Priority: P4 CC: boris, ivan, kondratyuk, lav, moiseev, night, vostok
Version: 1.0.8   
Target Milestone: ---   
Hardware: PC   
OS: All   
URL: http://rt.etersoft.ru/Ticket/Display.html?id=7875
Whiteboard:
Заявки RT: Связано с:
Дата напоминания:
Bug Depends on: 421, 709, 1101    
Bug Blocks: 2710    
Attachments: лог

Description Alexeev Alexey 2008-08-19 15:04:32 MSD
WINE@Etersoft 1.0 Network релиз 1.0.8
Ubuntu/7.10

В терминальном сеансе (проверялось на Xming и Thinstuff lxserver) при вставке из буфера обмена текста *не содержащего* символы кириллицы wine аварийно завершает работу. Это происходит только с wine-придлжениями. Нативные приложения, например gedit, работают нормально.

Backtrace:
=>1 0x7f28fefc in winex11 (+0xfefc) (0x7fafee68)
2 0x7f29276e in winex11 (+0x1276e) (0x7fafef58)
3 0x7f2937ee X11DRV_GetClipboardData+0x29e() in winex11 (0x7fafefa8)
4 0x7f724b86 GetClipboardData+0x96() in user32 (0x7fafefe8)
5 0x7f746e5b in user32 (+0x46e5b) (0x7faff028)
6 0x7f7486a9 in user32 (+0x486a9) (0x7faff0a8)
7 0x7f749e4a EditWndProcW+0x1a() in user32 (0x7faff0c8)
8 0x7f7942da WINPROC_wrapper+0x1a() in user32 (0x7faff0f8)
9 0x7f7949b3 WINPROC_wrapper+0x6f3() in user32 (0x7faff138)
10 0x7f7994fe in user32 (+0x994fe) (0x7faff178)
11 0x7f76753b in user32 (+0x6753b) (0x7faff1e8)
12 0x7f76a83e in user32 (+0x6a83e) (0x7faff238)
13 0x7f76ac6a SendMessageW+0x4a() in user32 (0x7faff278)
14 0x7fb18b3b DIALOG_EditPaste+0x2b() in notepad (0x7faff298)
15 0x7fb1b706 in notepad (+0xb706) (0x7faff4e8)
16 0x7f7942da WINPROC_wrapper+0x1a() in user32 (0x7faff518)
17 0x7f7949b3 WINPROC_wrapper+0x6f3() in user32 (0x7faff558)
18 0x7f7994fe in user32 (+0x994fe) (0x7faff598)
19 0x7f76753b in user32 (+0x6753b) (0x7faff608)
20 0x7f76a83e in user32 (+0x6a83e) (0x7faff658)
21 0x7f76ac6a SendMessageW+0x4a() in user32 (0x7faff698)
22 0x7f75e44b in user32 (+0x5e44b) (0x7faff6e8)
23 0x7f75e5df TranslateAcceleratorW+0xef() in user32 (0x7faff718)
24 0x7fb1a7b2 WinMain+0x572() in notepad (0x7faffe48)
25 0x7fb1bead main+0x8d() in notepad (0x7faffec8)
26 0x7fb1bdec in notepad (+0xbdec) (0x7fafff08)
27 0x7fcef430 in kernel32 (+0x4f430) (0x7fafffe8)
28 0xb7e30a97 wine_switch_to_stack+0x17() in libwine.so.1 (0x00000000
Comment 1 Денис Баранов 2008-08-19 15:30:30 MSD
Можно по конкретней способ достижения баги?
А именно откуда происходит вставка и куда.
Comment 2 Alexander Moisseev 2008-08-19 15:41:03 MSD
На клиентской машине Windows XP Professional копирую в буфер обмена текст из любого приложения. Затем вставляю его в любое поле ввода приложения, запущенного в терминальном сеансе.
Кириллица - вставляется нормально.
Кириллица+латиница - вставляется только кириллица.
Латиница - аварийное завершение wine.
Comment 3 Денис Баранов 2008-08-19 16:05:16 MSD
Тестировал на NX Client в WinXp порблема не воспроизвелась.
Наверно нужны ваши логи.
Либо попробуйте установить бета версию wine 1.0.9
Comment 4 Alexander Moisseev 2008-08-19 16:08:17 MSD
Какие именно логи нужны?
Comment 5 Денис Баранов 2008-08-19 16:21:00 MSD
Похожая ошибка уже была и ее исправляли.
Вы можете прислать нам лог, полученный такой командой 
WINEDEBUG=+clipboard winelog program.exe
Либо установить версию wine 1.0.9 (скорее всего в ней будет все хорошо).
Comment 6 Alexander Moisseev 2008-08-20 17:21:53 MSD
Установил FreeNX (сборка RX@Etersoft). С NX такой проблемы нет. Но есть другая.
При копировании текста в буфер обмена из wine-приложения в окне NX клиента, в локальные приложения на XP ничего не вставляется, как будто буфер пустой. Остальные операции с буфером работают нормально.

Установил версию 1.0.9.
В поведении FreeNX и Xming ничего не изменилось.

Лог высылаю на e-mail <baraka@etersoft.ru>
Comment 7 Денис Баранов 2008-08-21 19:25:04 MSD
Created attachment 670 [details]
лог
Comment 8 Boris Savelev 2008-08-21 20:43:03 MSD
(In reply to comment #6)
> При копировании текста в буфер обмена из
> wine-приложения в окне NX клиента, в локальные
> приложения на XP ничего не вставляется, как
> будто буфер пустой. Остальные операции с
> буфером работают нормально.
это проблема nxclient
обсуждение и лекарство здесь
http://unixforum.org/index.php?showtopic=64076
Comment 9 Alexander Moisseev 2008-08-25 13:06:41 MSD
Действительно, у nxclient и Xming в многооконном режиме есть проблемы с буфером обмена. Но буфер обмена Xming в *одном окне* с нативными приложениями линукса работает нормально. Например с gedit. А поведение приложений, запущенных под wine см. Комментарий  #2 от Alexander Moisseev  2008-08-19 15:41:03.
Comment 10 Синицын Иван 2008-08-27 09:21:52 MSD
Судя по логам wine падает из-за попытки обратиться к нулевому указателю.
trace:clipboard:X11DRV_CLIPBOARD_ReadSelectionData Requesting conversion of L"COMPOUND_TEXT" property (227) from selection type 000000df
trace:clipboard:X11DRV_CLIPBOARD_ImportCompoundText Importing 0 line(s)
wine: Unhandled page fault on read access to 0x00000000 at address 0x7e590814 (thread 0009), starting debugger...
Unhandled exception: page fault on read access to 0x00000000 in 32-bit code (0x7e590814).

В функции X11DRV_CLIPBOARD_ImportCompoundText , есть строки следующего содержания:

    XmbTextPropertyToTextList(display, &txtprop, &srcstr, &count);
    wine_tsx11_unlock();

    TRACE("Importing %d line(s)\n", count);

    /* Compute number of lines */
    srclen = strlen(srcstr[0]);
    for (i = 0, lcount = 0; i <= srclen; i++)
    {
        if (srcstr[0][i] == '\n')
            lcount++;
    }

По логам видно, что XmbTextPropertyToTextList вернула в переменной count = 0, а значит список строк пуст.

Далее без всяких проверок идет обращение к первой строке в списке:
    srclen = strlen(srcstr[0]);
где мы и получаем ошибку и падение.

На мой взгляд, необходимо в этом месте сделать патч с проверкой переменной count, и если она не равна нулю, тогда работать дальше.
Comment 11 Константин Кондратюк 2008-09-15 10:41:09 MSD
У меня никак не воспроизводится. Денис, уточни, пожалуйста.
Comment 12 Анатолий Лютин 2008-09-18 12:35:12 MSD
(In reply to comment #10)

> На мой взгляд, необходимо в этом месте
> сделать патч с проверкой переменной count, и
> если она не равна нулю, тогда работать
> дальше.
> 

Наверное правильнее srcstr проверять на валидность или смотреть на возвращаемое значение функции.
Comment 13 Andrey Vusik 2008-09-18 20:11:08 MSD
(In reply to comment #11)
> У меня никак не воспроизводится. Денис,
> уточни, пожалуйста.
> 

Воспроизводить надо через Xming, т.к. работа с ним у нас не настроена я не тестировал это.
А вот бага с NXClient у нас воспроизводится.
Comment 14 Vitaly Lipatov 2008-11-24 23:36:59 MSK
По мотивам комментариев Вани и Толи сделал патч.
Патч отправлен в обе рассылки wine-patches@

commit 137f6695cbe3f91a9a29d1abd54ef14170c4922e
Author: Vitaly Lipatov <lav@etersoft.ru>
Date:   Mon Nov 24 23:06:40 2008 +0300

    WINEX11: add check for XmbTextPropertyToTextList result