Bug 5371

Summary: Не открывается html файл из обработки 1С 7.7
Product: WINE@Etersoft Reporter: Денис Баранов <baraka>
Component: Интеграция в хост-системуAssignee: Илья Шпигорь <shpigor>
Status: CLOSED FIXED QA Contact: Marat Sharipov <regan>
Severity: minor    
Priority: P3 CC: lav, petrovas
Version: 1.0.12   
Target Milestone: ---   
Hardware: PC   
OS: All   
Whiteboard:
Заявки RT: 13494 Связано с:
Дата напоминания:
Bug Depends on:    
Bug Blocks: 5395    
Attachments: Дамп ошибки, возникающий при открытии файла.
Новая версия обработки

Description Денис Баранов 2010-03-29 19:00:18 MSD
Имеется обработка, в которой с помощью команды  ЗапуститьПриложение вызывается html файл.
При запуске через wine, открывается firefox но с "левым" адресом в строке.
Должен открываться нужный файл.

Бутылка 1c77/1c77-base
Обработка в C:\test\test.ert
Comment 1 Илья Шпигорь 2010-04-07 12:29:03 MSD
Насколько понял для открытия html используется xdg-open из пакета xdg-utils.

1с7 передает в качестве аргумента xdg-open'у какой-то мусор (args - вывод из /usr/bin/xdg-open):

$ww 1cv7s.exe
args: 䌢尺整瑳睜栮浴≬ⰬㄭⰬⰬ
/usr/bin/xdg-open: line 377: htmlview: команда не найдена

winefile передает корректный путь до файла и все открывается:

$ww winefile
args: /net/wine/bottles/1c77/.wine-1c77-base/dosdevices/c:/test/w.html
/usr/bin/xdg-open: line 377: htmlview: команда не найдена

Comment 2 Петров Александр 2010-04-07 12:40:24 MSD
(In reply to comment #1)
> Насколько понял для открытия html
> используется xdg-open из пакета xdg-utils.
> 
> 1с7 передает в качестве аргумента xdg-open'у
> какой-то мусор (args - вывод из /usr/bin/xdg-open):
> 
> $ww 1cv7s.exe
> args: 䌢尺整瑳睜栮浴≬ⰬㄭⰬⰬ
> /usr/bin/xdg-open: line 377: htmlview: команда не найдена
> 
> winefile передает корректный путь до файла и
> все открывается:
> 
> $ww winefile
> args: /net/wine/bottles/1c77/.wine-1c77-base/dosdevices/c:/test/w.html
> /usr/bin/xdg-open: line 377: htmlview: команда не найдена
> 

У маня открывается через gvfs-open (т.к. использую в качестве рабочего стола GNOME), но по сути передаются теже кракозябры.
Comment 3 Илья Шпигорь 2010-04-07 14:48:41 MSD
Для открытия url вызывается:

C:\windows\system32\winebrowser.exe -nohome

Сам url передается ему через DDE (Dynamic Data Exchange). Сейчас winebrowser считывает только юникодные строки из DDE.

Насколько понимаю проблема в том, что 1с7 передает ASCII кодировку.
Comment 4 Петров Александр 2010-04-07 14:50:21 MSD
(In reply to comment #3)
> Для открытия url вызывается:
> 
> C:\windows\system32\winebrowser.exe -nohome
> 
> Сам url передается ему через DDE (Dynamic Data Exchange).
> Сейчас winebrowser считывает только юникодные
> строки из DDE.
> 
> Насколько понимаю проблема в том, что 1с7
> передает ASCII кодировку.
> 

да, 1с7 работает только в кодировке 1251, другие не понимает.
Comment 5 Илья Шпигорь 2010-04-07 16:13:03 MSD
Выложил патч.

Решение заключается в том, чтобы проверять строку полученную через DDE с помощью IsTextUnicode. Если проверка не проходит - конвертировать ее в unicode.
Comment 6 Петров Александр 2010-04-08 08:21:43 MSD
(In reply to comment #5)
> Выложил патч.
> 
> Решение заключается в том, чтобы проверять
> строку полученную через DDE с помощью
> IsTextUnicode. Если проверка не проходит -
> конвертировать ее в unicode.
> 

а где можно получить патч? Для меня это критично.
Comment 7 Илья Шпигорь 2010-04-08 10:45:29 MSD
> а где можно получить патч? Для меня это
> критично.

Патч войдет в следующую сборку WINE@Etersoft, которая будет доступна для скачивания на странице продукта нашего сайта.
Comment 8 Vitaly Lipatov 2010-04-08 17:18:17 MSD
Сборка будет завтра (09.04.10) к ночи доступна для скачивания по заказу сборки  testing.
Comment 9 Денис Баранов 2010-04-11 17:38:12 MSD
Принято.
WINE@Etersoft 1.0.12 eter5/eter4
Comment 10 Денис Баранов 2010-04-11 17:38:54 MSD
(In reply to comment #6)
> а где можно получить патч? Для меня это
> критично.
> 
Вы можете заказать сборку testing на странице продукта
Comment 11 Петров Александр 2010-04-15 17:01:25 MSD
(In reply to comment #5)
> Выложил патч.
> 
> Решение заключается в том, чтобы проверять
> строку полученную через DDE с помощью
> IsTextUnicode. Если проверка не проходит -
> конвертировать ее в unicode.
> 

Проблема всё равно осталась, если в пути к файлу присутствует кириллица.
Вывод консоли:
err:seh:raise_exception Unhandled exception code c0000005 flags 0 addr 0x7bc45584
wine: Unhandled page fault on read access to 0x00000030 at address 0x60353e60 (thread 0014), starting debugger...
Unhandled exception: page fault on read access to 0x00000030 in 32-bit code (0x60353e60).
Register dump:
 CS:0073 SS:007b DS:007b ES:007b FS:0033 GS:003b
 EIP:60353e60 ESP:0033fb60 EBP:0033fb98 EFLAGS:00210202(   - 00      - -RI1)
 EAX:001221b8 EBX:60410550 ECX:00122980 EDX:0000002c
 ESI:0000c003 EDI:00000000
Stack dump:
0x0033fb60:  00000001 000701ca 00000000 00000000
0x0033fb70:  603527f0 00000000 00122d70 000801c8
0x0033fb80:  603e0940 00000601 603c6afb 60410550
0x0033fb90:  00122548 00000000 0033fbd8 6035604a
0x0033fba0:  001221b8 0000c003 000701ca 00000000
0x0033fbb0:  000b00ae 000701ca 00122548 00000000
Backtrace:
=>0 0x60353e60 in user32 (+0x33e60) (0x0033fb98)
  1 0x6035604a in user32 (+0x3604a) (0x0033fbd8)
  2 0x603576a8 DdeNameService+0x2c8() in user32 (0x0033fc68)
  3 0x639a3a00 wmain+0x700() in winebrowser (0x0033fec8)
  4 0x639a3ee6 in winebrowser (+0x3ee6) (0x0033fef8)
  5 0x7b876e2f in kernel32 (+0x56e2f) (0x0033ffe8)
0x60353e60: cmpl	%esi,0x4(%edx)
Modules:
Module	Address			Debug info	Name (56 modules)
ELF	  101000-  106000	Deferred        libxfixes.so.3
Comment 12 Петров Александр 2010-04-15 17:04:36 MSD
Created attachment 1644 [details]
Дамп ошибки, возникающий при открытии файла.
Comment 13 Илья Шпигорь 2010-04-15 17:05:25 MSD
Переоткрываю багу.
Проблема с кириллицей.
Comment 14 Петров Александр 2010-04-15 17:08:00 MSD
Created attachment 1645 [details]
Новая версия обработки

В моем случае значение переменное НИмяФайла:
НИмяФайла = "U:\1C\БД Апрель\test.html"

Исключить кириллицу не возможно, т.к. связано с большими трудностями. (хотя может тут пробел дело портит?)
Comment 15 Петров Александр 2010-04-15 17:13:11 MSD
Если исключить пробелы (создал базу с путем H:\База), то возникает такая ошибка:
err:heap:HEAP_ValidateInUseArena Heap 0x110000: prev arena 0x122948 invalid for in-use 0x122978
gvfs-open: h:///%5C%D0%91%D0%B0%D0%B7%D0%B0%5Ctest.html%E5%89%86%E4%95%85x%11%E2%B5%A8%12EL32.dll: ошибка открытия адреса: Указанный адрес не поддерживается
Comment 16 Илья Шпигорь 2010-04-19 15:21:17 MSD
Выложил еще один патч.

Проблема в том, что из ddeString делаем unicode строку, но память под него выделена как для ASCII строки, т.е. в буфер ложим больше чем его размер. Поэтому память портилась (т.к. heap используется в других местах программы) и ссылка получалась битая.

Решение - при преобразовании ddeString в unicode - заново выделять под него память.

Проверял с кириллицей и пробелами в путях - должно работать.
Comment 17 Marat Sharipov 2011-01-28 15:38:03 MSK
wine  7.42/15
Бутылка 1c77/1c77-base
Обработка в C:\test\test.ert
html открывается
Принята