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:Мне кажется что в серьёзных проектах системная библиотека не должна виснуть из-за того что кто-то не правильно задал параметры, потому что это бросает тень на стабильность работы всей системы.
Существуют, например, системные функции, принимающие размер буфера. Ну давай, сделай валидацию
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 (72.19 KiB)
Viewed 9568 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'а.
Нужно будет латать 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