View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0000459 | Far Manager | File System | public | 2008-01-16 07:21 | 2008-03-12 08:06 |
Reporter | pm_kan | Assigned To | alexy | ||
Priority | normal | Severity | minor | Reproducibility | always |
Status | closed | Resolution | fixed | ||
Platform | x86 | OS | Win | OS Version | 2K SP4 R1 |
Fixed in Version | 1.80 alpha 1 | ||||
Summary | 0000459: Невозможно войти в каталог, если имя состоит из одной буквы | ||||
Description | При попытке входа в каталоги, имя которых состоит из одной буквы, происходит переход в корень диска. | ||||
Steps To Reproduce | 1. Создать в корне диска структуру каталогов \aa\b 2. Попытаться войти в каталог b последовательно заходя из корня диска. | ||||
Additional Information | Не работает только в панелях. Переход по cd отрабатывает корректно. Было обнаружено на пути со структурой аналогичной \12345678\123\12.34\12345\123456\1, но при проверке воспроизвелось и на более коротких путях. | ||||
Tags | No tags attached. | ||||
Build | 437 | ||||
|
Не подтверждаю. Всё работает, как и должно. |
|
Аналогично, не подтверждаю а билд 1.80 какой? |
|
> а билд 1.80 какой? 1.80 a1 b412 (указано в поле "Сборка продукта") в первый раз было замечено на b300, но тогда не было времени, чтобы разобраться и составить запрос. > Аналогично, не подтверждаю может дело в ОСи? У меня на Win2K SP4 R1 стабильно воспроизводится как дома, так и на работе. Проверялось сразу после первого запуска 1.80 на машине (на последующих запусках тоже воспроизводится). Плагинов нет вообще. Если на работе сильно не достанут, на выходных скачаю исходники и попробую пройтись отладчиком, может что всплывет. |
|
Хы... на Win2k SP4 подтверждаю. На Win2003 SP2 не подтверждаю. |
|
Выяснилось, что это баг в определении длины пути ф-ей GetFullPathNameW (по крайней мере на Win2k). например, приложенный test выводит <out> path=qq, detected len=11 T:\Temp\qq, real len=11 path=q, detected len=7 T:\Temp\q, real len=10 </out> Я вижу три выхода, но у каждого свой минус: 1. Всегда делать буфер на 3 символа больше. (Лишние затраты по памяти) 2. Увеличивать буфер, только если StrLength(NewDir)==1. (Лишние затраты по времени) 3. На случай, если такой баг не только для однобуквенных символов, узнаем путь до "." и к нему добавляем длину NewDir. (Затраты по памяти, особенно если в NewDir полный путь) первый кажется более подходящим. |
2008-01-19 12:26
|
|
|
Также при исправлении ошибки нашел описание еще одного бага с GetFullPathNameW (см. "Beware of GetFullPathNameW" http://www.ddj.com/windows/184416671?pgno=1): он не любит, если lpFileName и lpBuffer совпадают. Здесь такого вроде нет, но при первом входе отладчика (VS 2005 Express 8.0.50727.42) в FarChDir у NewDir и lpwszCurDir один и тот же адрес:( Адреса он сразу показывает одинаковые, но значения сначала разные. После выполнения GetFullPathNameW(NewDir,nSize,lpwszCurDir,&ptr) отладчик показывает, что и значения там одинаковые. Больше похоже на то, что у отладчика сносит крышу (пока еще не проверял, какие у них адреса на самом деле). Никто с таким не сталкивался? Или это особенности связки Win2k+VS Express 2005 (не SP1)? |
|
Забыл указать, что патчи для случаев, описанных в ноте 0001138 также приложены в файле. |
|
Дошли руки. Мне больше всего нравится 0000459_1.diff (т.е. вариант 1) но я тока не понял там всё таки надо +3 или +2 а то в 0000459_1.diff +2 а в 0000459_2.diff уже +3? |
|
Единственное замечания, лично я бы в подобные места добавлял развёрнутые комментарии почему сделан такой финт ушами. А то больно уж место не очевидное и при каком-нибудь рефакторинге/исправлении оно может быть покоцано. |
|
> Мне больше всего нравится 0000459_1.diff (т.е. вариант 1) но я тока не понял там всё таки надо +3 или +2 Должно быть +3. Как и почему в 0000459_1.diff оказалось +2 уже не помню:( |
|
> Единственное замечания, лично я бы в подобные места добавлял развёрнутые комментарии почему сделан такой финт ушами. Согласен, учту на будущее. Здесь можно добавить что-то вроде: "В Win2k ф-я GetFullPathNameW неверно определяет длину пути, если конечный каталог состоит из одного символа. Возвращаемая длина меньше реальной на 3 символа." |
|
fixed. 437. |
|
подтверждаю |
Date Modified | Username | Field | Change |
---|---|---|---|
2008-01-16 07:21 | pm_kan | New Issue | |
2008-01-16 07:29 | DiRTy_GaRRy | Note Added: 0001133 | |
2008-01-16 07:56 | vskirdin | Note Added: 0001134 | |
2008-01-16 08:33 | pm_kan | Note Added: 0001135 | |
2008-01-17 01:19 | DiRTy_GaRRy | Note Added: 0001136 | |
2008-01-17 03:16 | DiRTy_GaRRy | Note Edited: 0001136 | |
2008-01-19 12:25 | pm_kan | Note Added: 0001138 | |
2008-01-19 12:26 | pm_kan | File Added: 0000459.7z | |
2008-01-19 12:35 | pm_kan | Note Added: 0001139 | |
2008-02-01 05:54 | pm_kan | Note Added: 0001168 | |
2008-03-11 17:16 | alexy | Status | new => assigned |
2008-03-11 17:16 | alexy | Assigned To | => alexy |
2008-03-11 17:18 | alexy | Note Added: 0001281 | |
2008-03-12 02:21 | DiRTy_GaRRy | Note Added: 0001285 | |
2008-03-12 07:09 | pm_kan | Note Added: 0001294 | |
2008-03-12 07:22 | pm_kan | Note Added: 0001295 | |
2008-03-12 07:38 | alexy | Note Added: 0001296 | |
2008-03-12 07:38 | alexy | Status | assigned => feedback |
2008-03-12 07:38 | pm_kan | Note Edited: 0001295 | |
2008-03-12 08:04 | pm_kan | Status | feedback => resolved |
2008-03-12 08:04 | pm_kan | Resolution | open => fixed |
2008-03-12 08:04 | pm_kan | Note Added: 0001298 | |
2008-03-12 08:06 | alexy | Build | => 437 |
2008-03-12 08:06 | alexy | Status | resolved => closed |
2008-03-12 08:06 | alexy | Fixed in Version | => 1.80 alpha 1 |