OpenDialog

Applications development, KoOS API questions
  • 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:Дело хозяйское, конечно.
    Но не думаю, что кто-то в серьёзных проектах делал бы подобные "фиксы" только из-за того, что кто-то там не правильно передал параметры.
    Мне кажется что в серьёзных проектах системная библиотека не должна виснуть из-за того что кто-то не правильно задал параметры, потому что это бросает тень на стабильность работы всей системы. А если библиотека еще при этом и сообщит как-нибудь что параметры неправильные то это будет вообще идеальный случай. Вдруг какой-нибудь зловредный хакер захочет написать вирус для слома системы, в таком случае системная библиотека которая будет копировать байты непонятно куда при неправильно переданных параметрах для него будет находкой. Я думаю что это дыра в безопасности которую нужно закрыть.
  • 0CodErr wrote:
    Siemargl wrote:Проблема глубже - в отсутствии валидации параметров в библиотеке.
    И как ты себе эту "валидацию" представляешь?
    Design by contract
    https://ru.wikipedia.org/wiki/Контрактн ... ммирование
  • 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. Будешь делать валидацию?
  • 0CodErr wrote:
    Siemargl wrote:Design by contract
    А какое отношение это имеет конкретно к нашему случаю?
    А так всё правильно, конечно.
    Каждому инструменту должно быть своё место.
    Тебе надо напрячься и подумать.
  • 0CodErr wrote:Я могу указатель передать 0xFFFFFFFF. Будешь делать валидацию?
    Если ограничить приложение для просмотра только своей директорией запуска (и адреса и диапазон ячеек памяти выделенными системой контролировать) + данные из других директорий только копировать (при просмотре других директорий), то может это будет наиболее правильно для повышения "вирусоустойчивости" системы. :)

    P.S. Можно ещё ввести проверку валидности ядра системы по какой то форме сертификатов.
  • Не холиварте плиз.
    Из хаоса в космос
  • Появился серьезный баг в ночных сборках:
    1. любым способом запускаем OpenDial
    2. нажимаем клавишу End

    => падение программы
    Attachments
    opendial bug.png
    opendial bug.png (36.21 KiB)
    Viewed 9394 times
    Из хаоса в космос
  • Проблема есть, но несколько иная. Opendialog падает при большом количестве файлов (число не сажу, но например корень рамдиска подходит). Падает в том числе и при простом скроллинге.
    to infinity and beyond
  • Leency wrote:Появился серьезный баг
    punk_joker wrote:падает при большом количестве файлов
    Когда появился? Найдите проблемную ревизию тогда или это всегда было(я не замечал такого раньше)?
  • 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 9351 times
  • Посмотрел, проблема с файлом "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 иконка.
  • Что-то в проекте много дубликатов icons.ini (раскиданы по директориям).
    Внёс временный fix в revision #7318, если файлом для билда не ошибся, то должно помочь.

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

    Что-то в проекте много дубликатов icons.ini (раскиданы по директориям).
    Самого это жутко бесит, а причина в том, что в них есть переводимый текст http://prntscr.com/ks6qup
    Из хаоса в космос
  • 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
  • Who is online

    Users browsing this forum: No registered users and 5 guests