View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0003708 | Far Manager | Editor | public | 2019-04-27 08:00 | 2019-05-08 21:10 |
Reporter | shmuel | Assigned To | |||
Priority | normal | Severity | minor | Reproducibility | always |
Status | new | Resolution | open | ||
Platform | x86 | OS | Windows | OS Version | 7 |
Product Version | 3.0 | ||||
Summary | 0003708: Некорректное поведение "Go to" в редакторе | ||||
Description | Некорректное поведение "Go to" в редакторе при задании большой величины горизонтальной позиции. | ||||
Steps To Reproduce | 1. Выставим следующие опции редактора: [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. | ||||
Tags | No tags attached. | ||||
Build | |||||
|
Позиция внтури редактора - int (32bit), со всеми вытекающими. |
|
При парсинге позиции нужно определять, валидное ли значение введено. Если невалидное - выдать сообщение об ошибке или, на худой конец, молча проигнорировать и ничего не делать. А у нас получается, что невалидное значение, введенное юзером, приводит редактор в неконсистентное состояние. Вот об этом данный тикет и сообщает. |
|
Если бы всё было так просто. Проверку в конкретно этот диалог засунуть можно. Но это никак не помешает пользователю ввести 1:2147483648 (что является вполне валидным значением) и коварно нажать стрелку вправо или пробел. |
|
Я думал над этим сценарием тоже. 1. Никто не мешает Фару запретить движение курсора вправо (включая paste) при достижении 2^31-1 байта. 2. Если это выглядит серьёзным ограничением, то надо делать переменную 64-битной. Да, я не считаю это серьёзным багом, на практике вряд ли с этой ситуацией встречусь. Желательно всё же было бы предотвращать неконсистентное состояние программы, которое к тому же ещё и запоминается при выходе из файла. |
|
В принципе, можно там позаменять int на unsigned int. Это даст 2^32, а при переполнении будет просто перескакивать в начало, что лучше, чем поломанный инвариант. |
Date Modified | Username | Field | Change |
---|---|---|---|
2019-04-27 08:00 | shmuel | New Issue | |
2019-04-27 08:06 | shmuel | Additional Information Updated | |
2019-04-27 09:42 | DrKnS | Note Added: 0016489 | |
2019-04-27 09:49 | shmuel | Note Added: 0016490 | |
2019-05-08 20:28 | DrKnS | Note Added: 0016497 | |
2019-05-08 20:40 | shmuel | Note Added: 0016498 | |
2019-05-08 21:10 | DrKnS | Note Added: 0016499 |