Глюк в FSF.ConvertPath ?! Topic is solved

Здесь можно сообщить о найденных багах в Far.
Post Reply
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

В сборке 4242 наблюдается следующий эффект (чистая установка с дистрибутива под WinXP):

Предположим, текущая директория на диске С: в активной панели - C:\foo
а на диске D: (пассивная панель) - D:\bar
Нажимаем F5 на любом файле в активной панели и в открывшемся диалоге копирования пишем путь: D:something
Теперь жмем Enter и... получаем файл C:\foo\D нулевой длины !
При этом "copy C:\foo\something D:something" из командной строки отрабатывает нормально.
Эффект не зависит от состояния настройки "Use system copy routine".

Аналогичный эффект наблюдается в сборке 4173 под Win81, которую я использую для отладки плагинов.
Расследование показало, что FSF.ConvertPath(CPM_REAL, L"D:something", ...) возвращает L"C:\foo\D:something"

В стабильной сборке 4040 эффект воспроизвести не удалось.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Глюк в FSF.ConvertPath ?!

Post by John Doe »

stasf wrote: D:something
Это ж ADS

AltF7
*:*
[x] Search in alternate streams
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

Вот ёлки...
А как же теперь правильно путь к файлу получать, если плагин, скажем, вызывается из командной строки и пользователь задал параметр как относительный путь в виде D:something ?!
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Глюк в FSF.ConvertPath ?!

Post by John Doe »

Поведение явно нежелательное.
Вот ещё пример: http://forum.farmanager.com/viewtopic.p ... 78#p127978
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

John Doe wrote:Поведение явно нежелательное.
Ну, мягко говоря, да.
А с учетом того, что FSF.ConvertPath(CPM_REAL, L"D:.\something", ...) возвращает L"C:\foo\D:.\something"
вообще тянет на полноценный баг...
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

John Doe wrote:Вот ещё пример: http://forum.farmanager.com/viewtopic.p ... 78#p127978
Мне кажется, HaRT там очень правильную мысль высказал: если кому-то понадобится что-то в поток записать (что, наверное, бывает не очень часто), пусть укажет это явно: ".\D:something"

В общем, предложение такое: если задаваемый пользователем путь начинается с

Code: Select all

[A..Za..z]:
считать это попыткой обращения к текущей директории на соответствующем устройстве, а не к потоку.
2useven10
Posts: 5209
Joined: Mon 07 Sep, 2009 10:40
Has thanked: 18 times
Been thanked: 310 times

Глюк в FSF.ConvertPath ?!

Post by 2useven10 »

на багтрекер, если найдёте билд, когда такое поведение появилось, это может ускорить процесс исправления.
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

Спасибо за оперативный ремонт :-)
Меня, правда, продолжают терзать смутные сомнения по поводу вот этой строки из ParsePath:

Code: Select all

*Root = path.size() == MatchLength || (path.size() == (MatchLength + 1) && IsSlash(path[MatchLength]));
Для path == L"c:" она, похоже, должна выдать TRUE, что в теории неправильно...
Но внешних проявлений этой неправильности я не нашел.
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

И еще, судя по всему, функция ExtractFileName из pathmix.cpp вернет пустую строку, если передать ей путь вида "c:path"
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

Глюк в FSF.ConvertPath ?!

Post by DrKnS »

stasf wrote:Для path == L"c:" она, похоже, должна выдать TRUE, что в теории неправильно...
Это нормально. Root используется для определения, допустимо ли отбросить в полученном пути последний слеш, а тут и отбрасывать нечего.
stasf wrote:И еще, судя по всему, функция ExtractFileName из pathmix.cpp вернет пустую строку, если передать ей путь вида "c:path"


А, если не секрет, зачем всё это надо?
Это же такое легаси.
stasf
Posts: 113
Joined: Wed 10 Dec, 2014 22:53
Has thanked: 3 times
Been thanked: 1 time

Глюк в FSF.ConvertPath ?!

Post by stasf »

DrKnS wrote: А, если не секрет, зачем всё это надо?
Это же такое легаси.
Честно говоря, я не не разбирался зачем это надо - просто код посмотрел и на всякий случай поделился сомнениями :-)
Post Reply

Return to “Глюки и баги”