View Issue Details

IDProjectCategoryView StatusLast Update
0000459Far ManagerFile Systempublic2008-03-12 08:06
Reporterpm_kan Assigned Toalexy  
PrioritynormalSeverityminorReproducibilityalways
Status closedResolutionfixed 
Platformx86OSWinOS Version2K SP4 R1
Fixed in Version1.80 alpha 1 
Summary0000459: Невозможно войти в каталог, если имя состоит из одной буквы
DescriptionПри попытке входа в каталоги, имя которых состоит из одной буквы, происходит переход в корень диска.
Steps To Reproduce1. Создать в корне диска структуру каталогов \aa\b
2. Попытаться войти в каталог b последовательно заходя из корня диска.
Additional InformationНе работает только в панелях. Переход по cd отрабатывает корректно.
Было обнаружено на пути со структурой аналогичной \12345678\123\12.34\12345\123456\1, но при проверке воспроизвелось и на более коротких путях.
TagsNo tags attached.
Build437

Activities

DiRTy_GaRRy

2008-01-16 07:29

developer   bugnote:0001133

Не подтверждаю. Всё работает, как и должно.

vskirdin

2008-01-16 07:56

administrator   bugnote:0001134

Аналогично, не подтверждаю
а билд 1.80 какой?

pm_kan

2008-01-16 08:33

reporter   bugnote:0001135

> а билд 1.80 какой?
1.80 a1 b412 (указано в поле "Сборка продукта")
в первый раз было замечено на b300, но тогда не было времени, чтобы разобраться и составить запрос.
> Аналогично, не подтверждаю
может дело в ОСи? У меня на Win2K SP4 R1 стабильно воспроизводится как дома, так и на работе. Проверялось сразу после первого запуска 1.80 на машине (на последующих запусках тоже воспроизводится). Плагинов нет вообще.

Если на работе сильно не достанут, на выходных скачаю исходники и попробую пройтись отладчиком, может что всплывет.

DiRTy_GaRRy

2008-01-17 01:19

developer   bugnote:0001136

Last edited: 2008-01-17 03:16

Хы... на Win2k SP4 подтверждаю.
На Win2003 SP2 не подтверждаю.

pm_kan

2008-01-19 12:25

reporter   bugnote:0001138

Выяснилось, что это баг в определении длины пути ф-ей 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

 

0000459.7z (824 bytes)

pm_kan

2008-01-19 12:35

reporter   bugnote:0001139

Также при исправлении ошибки нашел описание еще одного бага с 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)?

pm_kan

2008-02-01 05:54

reporter   bugnote:0001168

Забыл указать, что патчи для случаев, описанных в ноте 0001138 также приложены в файле.

alexy

2008-03-11 17:18

administrator   bugnote:0001281

Дошли руки. Мне больше всего нравится 0000459_1.diff (т.е. вариант 1) но я тока не понял там всё таки надо +3 или +2 а то в 0000459_1.diff +2 а в 0000459_2.diff уже +3?

DiRTy_GaRRy

2008-03-12 02:21

developer   bugnote:0001285

Единственное замечания, лично я бы в подобные места добавлял развёрнутые комментарии почему сделан такой финт ушами. А то больно уж место не очевидное и при каком-нибудь рефакторинге/исправлении оно может быть покоцано.

pm_kan

2008-03-12 07:09

reporter   bugnote:0001294

> Мне больше всего нравится 0000459_1.diff (т.е. вариант 1) но я тока не понял там всё таки надо +3 или +2
Должно быть +3.
Как и почему в 0000459_1.diff оказалось +2 уже не помню:(

pm_kan

2008-03-12 07:22

reporter   bugnote:0001295

Last edited: 2008-03-12 07:38

> Единственное замечания, лично я бы в подобные места добавлял развёрнутые комментарии почему сделан такой финт ушами.
Согласен, учту на будущее.
Здесь можно добавить что-то вроде: "В Win2k ф-я GetFullPathNameW неверно определяет длину пути, если конечный каталог состоит из одного символа. Возвращаемая длина меньше реальной на 3 символа."

alexy

2008-03-12 07:38

administrator   bugnote:0001296

fixed. 437.

pm_kan

2008-03-12 08:04

reporter   bugnote:0001298

подтверждаю

Issue History

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