Page 2 of 3

Re: OpenDialog

Posted: Fri Oct 06, 2017 3:54 pm
by 0CodErr
Siemargl wrote:Проблема глубже - в отсутствии валидации параметров в библиотеке.
И как ты себе эту "валидацию" представляешь?
IgorA wrote:Если фильтр больше чем 4кб то программа и OpenDialog теперь падать не должны. OpenDialog такой фильтр проигнорирует и запустится без фильтра.
А если я вот хочу такой большой фильтр? Не важно, зачем. Вот хочу и всё!
На мой взгляд такая проверка лишняя. Правильным является следование документации.
Дело хозяйское, конечно.
Но не думаю, что кто-то в серьёзных проектах делал бы подобные "фиксы" только из-за того, что кто-то там не правильно передал параметры.

Re: OpenDialog

Posted: Fri Oct 06, 2017 5:28 pm
by IgorA
0CodErr wrote:А если я вот хочу такой большой фильтр? Не важно, зачем. Вот хочу и всё!
На мой взгляд такая проверка лишняя. Правильным является следование документации.
большой фильтр никак не получится, потому что в строке 199 файла opendial.mac выделяется память под фильтр (и еще какие-то внутренние библиотечные дела) фиксированного размера:

Code: Select all

	mcall	SF_SYS_MISC,SSF_MEM_OPEN,od_com_area_name,8192,0x09
Из этих 8 кб судя по коду около 4кб используется под фильтр. Потому даже если пользователь следуя документации выделит памяти больше 4кб диалог может зависнуть, что и было устранено в ревизии
0CodErr wrote:Дело хозяйское, конечно.
Но не думаю, что кто-то в серьёзных проектах делал бы подобные "фиксы" только из-за того, что кто-то там не правильно передал параметры.
Мне кажется что в серьёзных проектах системная библиотека не должна виснуть из-за того что кто-то не правильно задал параметры, потому что это бросает тень на стабильность работы всей системы. А если библиотека еще при этом и сообщит как-нибудь что параметры неправильные то это будет вообще идеальный случай. Вдруг какой-нибудь зловредный хакер захочет написать вирус для слома системы, в таком случае системная библиотека которая будет копировать байты непонятно куда при неправильно переданных параметрах для него будет находкой. Я думаю что это дыра в безопасности которую нужно закрыть.

Re: OpenDialog

Posted: Fri Oct 06, 2017 5:33 pm
by Siemargl
0CodErr wrote:
Siemargl wrote:Проблема глубже - в отсутствии валидации параметров в библиотеке.
И как ты себе эту "валидацию" представляешь?
Design by contract
https://ru.wikipedia.org/wiki/Контрактн ... ммирование

Re: OpenDialog

Posted: Fri Oct 06, 2017 6:37 pm
by 0CodErr
Siemargl wrote:Design by contract
А какое отношение это имеет конкретно к нашему случаю?
А так всё правильно, конечно.
Каждому инструменту должно быть своё место.
Языки, изначально поддерживающие средства для контрактного программирования:
...
Component Pascal, Modula-2, Modula-3, Oberon-2, Oberon-07/11, Zonnon, Active Oberon, Ada 2012
IgorA wrote:Потому даже если пользователь следуя документации выделит памяти больше 4кб диалог может зависнуть, что и было устранено в ревизии
А, ну это, оказывается, ограничение самого диалога.
IgorA wrote:Мне кажется что в серьёзных проектах системная библиотека не должна виснуть из-за того что кто-то не правильно задал параметры, потому что это бросает тень на стабильность работы всей системы.
Существуют, например, системные функции, принимающие размер буфера. Ну давай, сделай валидацию :lol:
IgorA wrote:Вдруг какой-нибудь зловредный хакер захочет написать вирус для слома системы, в таком случае системная библиотека которая будет копировать байты непонятно куда при неправильно переданных параметрах для него будет находкой. Я думаю что это дыра в безопасности которую нужно закрыть.
Если хакер захочет, он это сделает.
Не "непонятно куда", а ровно туда, куда указано в параметрах.
Возможно, в твоём понимании неправильные параметры — это только размер, а в реальности — это вообще любой параметр.
Я могу указатель передать 0xFFFFFFFF. Будешь делать валидацию?

Re: OpenDialog

Posted: Fri Oct 06, 2017 8:34 pm
by Siemargl
0CodErr wrote:
Siemargl wrote:Design by contract
А какое отношение это имеет конкретно к нашему случаю?
А так всё правильно, конечно.
Каждому инструменту должно быть своё место.
Тебе надо напрячься и подумать.

Re: OpenDialog

Posted: Fri Oct 06, 2017 9:43 pm
by Kopa
0CodErr wrote:Я могу указатель передать 0xFFFFFFFF. Будешь делать валидацию?
Если ограничить приложение для просмотра только своей директорией запуска (и адреса и диапазон ячеек памяти выделенными системой контролировать) + данные из других директорий только копировать (при просмотре других директорий), то может это будет наиболее правильно для повышения "вирусоустойчивости" системы. :)

P.S. Можно ещё ввести проверку валидности ядра системы по какой то форме сертификатов.

Re: OpenDialog

Posted: Fri Oct 06, 2017 11:51 pm
by Leency
Не холиварте плиз.

Re: OpenDialog

Posted: Tue May 22, 2018 10:58 pm
by Leency
Появился серьезный баг в ночных сборках:
1. любым способом запускаем OpenDial
2. нажимаем клавишу End

=> падение программы

Re: OpenDialog

Posted: Tue May 22, 2018 11:07 pm
by punk_joker
Проблема есть, но несколько иная. Opendialog падает при большом количестве файлов (число не сажу, но например корень рамдиска подходит). Падает в том числе и при простом скроллинге.

Re: OpenDialog

Posted: Thu May 24, 2018 9:20 am
by 0CodErr
Leency wrote:Появился серьезный баг
punk_joker wrote:падает при большом количестве файлов
Когда появился? Найдите проблемную ревизию тогда или это всегда было(я не замечал такого раньше)?

Re: OpenDialog

Posted: Thu May 24, 2018 11:17 am
by 0CodErr
punk_joker wrote:Opendialog падает при большом количестве файлов (число не сажу, но например корень рамдиска подходит).
Всё же, наверное, проблема не в количестве файлов(создал 10000 файлов с помощью GenFiles http://board.kolibrios.org/viewtopic.php?f=9&t=3294)
Spoiler:
1.PNG
1.PNG (72.19 KiB)
Viewed 9414 times

Re: OpenDialog

Posted: Fri Aug 17, 2018 1:13 am
by theonlymirage
Посмотрел, проблема с файлом "KERNEL.MNT". OpenDial будет вылетать при наличии любого файла с непустым именем и расширением ".MNT" (например, M.MNT).
Можно это легко проверить:
1) создайте в tmp0/1/ любой файл с расширением MNT или перетащите туда KERNEL.MNT
2) откройте OpenDial и зайдите в директорию tmp0/1/
3) наблюдаем вылет
В других приложениях идёт отсеивание по расширению, поэтому внутри TinyPad OpenDial работает корректно, так как файл ядра (при отрисовке списка) ему на глаза не попадается.

В icons.ini нужно задать иконку для файла ядра. Это самый простой вариант fix'а.

Code: Select all

...
mnt=3
txt=3
...
Нужно будет латать OpenDial, чтобы при отсутствии заданной иконки (не задано расширение или номер за пределами общего изображения), отображалась default иконка.

Re: OpenDialog

Posted: Fri Aug 17, 2018 2:15 pm
by theonlymirage
Что-то в проекте много дубликатов icons.ini (раскиданы по директориям).
Внёс временный fix в revision #7318, если файлом для билда не ошибся, то должно помочь.

В конце файла есть mnt=90 в разделе icons32, но видимо openDial игнорирует иконки из этого раздела или наоборот игнорирует сами разделы (но тогда читает mnt=90 и пытается найти 90ую иконку внутри icons16.png). Нужно смотреть его код.

Re: OpenDialog

Posted: Sun Sep 09, 2018 1:22 am
by Leency
theonlymirage
Ты совершенно прав, OpenDial не использует libini, вместо этого свою кастомную функцию парсинга. Охохох.

Что-то в проекте много дубликатов icons.ini (раскиданы по директориям).
Самого это жутко бесит, а причина в том, что в них есть переводимый текст http://prntscr.com/ks6qup

Re: OpenDialog

Posted: Sun Sep 16, 2018 8:04 pm
by 0CodErr
Leency wrote:
Что-то в проекте много дубликатов icons.ini (раскиданы по директориям).
Самого это жутко бесит, а причина в том, что в них есть переводимый текст http://prntscr.com/ks6qup
Наверное, речь шла не про icons.ini, а про icon.ini.
http://websvn.kolibrios.org/filedetails ... Ficons.ini
http://websvn.kolibrios.org/filedetails ... 2Ficon.ini