View Issue Details

IDProjectCategoryView StatusLast Update
0003708Far ManagerEditorpublic2019-05-09 00:10
ReportershmuelAssigned To 
PrioritynormalSeverityminorReproducibilityalways
Status newResolutionopen 
Platformx86OSWindowsOS Version7
Product Version3.0 
Target VersionFixed in Version 
Summary0003708: Некорректное поведение "Go to" в редакторе
DescriptionНекорректное поведение "Go to" в редакторе при задании большой величины горизонтальной позиции.
Steps To Reproduce1. Выставим следующие опции редактора:
  [x] Cursor beyond end of line
  [ ] Cursor at the end
2. Откроем в редакторе новый пустой файл. Сохраним его под произвольным именем.
3. Go to: 1,3000000000 (переход на горизонтальную позицию 3*10^9).
4. Курсор переместился на последнюю экранную горизонтальную позицию, но по-прежнему в статусе отображается "Col 1" и "Ch 1".
5. Нажимаем Home - ничего визуально не изменяется - курсор по-прежнему на экране в конце справа.
6. Выходим из редактора и открываем этот файл снова - видим прежнюю картину, и Home так и не работает.
7. Ввод символов работает, но положение курсора остаётся "сбитым".
Additional InformationВышеописанное поведение наблюдалось в билде 5391.
TagsNo tags attached.
Build

Activities

DrKnS

2019-04-27 12:42

administrator   bugnote:0016489

Позиция внтури редактора - int (32bit), со всеми вытекающими.

shmuel

2019-04-27 12:49

developer   bugnote:0016490

При парсинге позиции нужно определять, валидное ли значение введено. Если невалидное - выдать сообщение об ошибке или, на худой конец, молча проигнорировать и ничего не делать. А у нас получается, что невалидное значение, введенное юзером, приводит редактор в неконсистентное состояние. Вот об этом данный тикет и сообщает.

DrKnS

2019-05-08 23:28

administrator   bugnote:0016497

Если бы всё было так просто.

Проверку в конкретно этот диалог засунуть можно.
Но это никак не помешает пользователю ввести 1:2147483648 (что является вполне валидным значением) и коварно нажать стрелку вправо или пробел.

shmuel

2019-05-08 23:40

developer   bugnote:0016498

Я думал над этим сценарием тоже.
1. Никто не мешает Фару запретить движение курсора вправо (включая paste) при достижении 2^31-1 байта.
2. Если это выглядит серьёзным ограничением, то надо делать переменную 64-битной.

Да, я не считаю это серьёзным багом, на практике вряд ли с этой ситуацией встречусь. Желательно всё же было бы предотвращать неконсистентное состояние программы, которое к тому же ещё и запоминается при выходе из файла.

DrKnS

2019-05-09 00:10

administrator   bugnote:0016499

В принципе, можно там позаменять int на unsigned int.
Это даст 2^32, а при переполнении будет просто перескакивать в начало, что лучше, чем поломанный инвариант.

Issue History

Date Modified Username Field Change
2019-04-27 11:00 shmuel New Issue
2019-04-27 11:06 shmuel Additional Information Updated View Revisions
2019-04-27 12:42 DrKnS Note Added: 0016489
2019-04-27 12:49 shmuel Note Added: 0016490
2019-05-08 23:28 DrKnS Note Added: 0016497
2019-05-08 23:40 shmuel Note Added: 0016498
2019-05-09 00:10 DrKnS Note Added: 0016499