View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000693 | Far Manager | Command Line/Execute | public | 2009-01-01 14:22 | 2009-01-11 20:35 |
Reporter | nfsr | Assigned To | alexy | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Fixed in Version | 2.0 | ||||
Summary | 0000693: Не открываются htm/html файлы | ||||
Description | 1) Наводим курсор на любой htm / html файл, нажимаем Enter (или Shift+Enter), появляется "Ошибка выполнения C:\h.html" Версия: far manager 2.0 alpha 1 (build 712) Версия far 1.71 работает правильно (открывает оперу) 2) Если таким же образом открыть djvu файл внешним просмотрщиком и быстро его закрыть, то выдаёт ошибку: "Ошибка при пересылке команды приложению. Ошибка выполнения". Если закрывать не сразу, то всё нормально работает. С djvu файлами ассоциирован WinDjView v0.5 Но этот момент уже не критичен... | ||||
Additional Information | Far manager 2.0 alpha 1 (build 712) Windows XP SP2 | ||||
Tags | No tags attached. | ||||
Build | 728 | ||||
|
у меня ни один из пунктов не воспроизводится. |
2009-01-01 19:09
|
registry.patch (876 bytes)
Index: unicode_far/registry.cpp =================================================================== --- unicode_far/registry.cpp (revision 2407) +++ unicode_far/registry.cpp (working copy) @@ -782,7 +782,8 @@ if ( nResult == ERROR_SUCCESS ) { - wchar_t *lpwszData = strData.GetBuffer (cbSize/sizeof(wchar_t)+1); + size_t symbolCount = cbSize / sizeof(wchar_t); + wchar_t *lpwszData = strData.GetBuffer (symbolCount); nResult = RegQueryValueExW ( hKey, @@ -793,7 +794,13 @@ &cbSize ); - strData.ReleaseBuffer (cbSize/sizeof(wchar_t)); + size_t realSize = symbolCount; + if (symbolCount > 0 && lpwszData[symbolCount - 1] == L'\0') { + // ���� ������ null-terminated, �� ���������� ����� ������ ������������ + realSize = -1; + } + + strData.ReleaseBuffer (realSize); } if ( nResult != ERROR_SUCCESS ) |
|
Как воспроизвести: В реестре: HKCR\txtfile\shell задать в качестве значения по умолчанию пустую строку. Затем в far-е попробовать запустить любой текстовый файл при помощи Enter. Получим ошибку (а должен был открыться блокнот). Вроде как, нашёл баг. После исправлений (см. патч), у меня всё заработало. Если в реестре в качестве default value - пустая строка, то длина возвращаемой строки в нашем случае становилась равной 1. Поэтому на строке strValue += strAction; приплюсовывался лишний символ '\0' и дальнейшая конкатенация не имела эффекта, т.к. этот нулевой символ обрезал строку. RegQueryValueEx в переменной lpcbData возвращает длину строки с учётом символа '\0', но этого символа может и не быть. Ровно как может быть 2 подряд идущих символа '\0' (в случае типа REG_MULTI_SZ) Поэтому, думаю, следует проверять, если последний символ - null, то нужно подсчитывать длину строки при помощи wcslen (то есть передать в ReleaseBuffer параметр -1) Сложновато объяснил, посмотрите лучше патч, думаю, будет понятней :) P.S. Нет необходимости выделять лишний символ, достаточно написать strData.GetBuffer(symbolCount), т.к. в cbSize содержится количество байт с учётом символа '\0', если он есть... |
|
728 |
Date Modified | Username | Field | Change |
---|---|---|---|
2009-01-01 14:22 | nfsr | New Issue | |
2009-01-01 14:22 | nfsr | Status | new => assigned |
2009-01-01 14:22 | nfsr | Assigned To | => alexy |
2009-01-01 15:33 | zg | Note Added: 0002275 | |
2009-01-01 19:09 | nfsr | File Added: registry.patch | |
2009-01-01 19:13 | nfsr | Note Added: 0002277 | |
2009-01-01 19:15 | nfsr | Note Edited: 0002277 | |
2009-01-11 19:53 | alexy | Relationship added | has duplicate 0000697 |
2009-01-11 19:59 | alexy | Note Added: 0002302 | |
2009-01-11 19:59 | alexy | Status | assigned => feedback |
2009-01-11 20:26 | nfsr | Status | feedback => resolved |
2009-01-11 20:26 | nfsr | Resolution | open => fixed |
2009-01-11 20:35 | alexy | Build | => 728 |
2009-01-11 20:35 | alexy | Status | resolved => closed |
2009-01-11 20:35 | alexy | Fixed in Version | => 2.0 |
2009-01-11 20:55 | alexy | Relationship deleted | has duplicate 0000697 |
2009-01-11 20:56 | alexy | Relationship added | related to 0000697 |