The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"70% проблем с безопасностью в Chromium вызваны ошибками при ..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Присылайте удачные настройки в раздел примеров файлов конфигурации на WIKI.opennet.ru.
. "70% проблем с безопасностью в Chromium вызваны ошибками при ..." +1 +/
Сообщение от Ordu (ok), 26-Май-20, 18:59 
Я понимаю в чём проблема, и я не говорю, что нельзя выкрутится в этой ситуации. Я говорю, что придётся городить огород мозголомных API.

Например, заворачивать все ноды в RefCell, чтобы динамически проверять правила борроу-чекера. (фууу, динамически). Можно подумать о том, какие именно наборы нодов мне надо выбирать, и создать способ описания набора, передавать в структуру это описание и лямбду, с тем чтобы она сделала бы нужную выборку нодов, и передала бы в мою лямбду эту выборку массивом.

Вероятно можно и другие способы придумать, но суть остаётся той же: куча геморроя на, казалось бы, ровном месте.

> Cell<i32> - zero-cost обёртка над i32

Она лишь условно zero-cost. Она zero-cost в том смысле, что не надо заморочного рантайма, и что она добавляет O(1) сложности. Но это не значит, что она обходится бесплатно. Если ты попробуешь сделать для одного и того же RefCell<T> два borrow, то получишь панику: RefCell при создании ссылки проверяет не существует ли ещё одной. Точнее два borrow прокатят, но если один из них будет borrow_mut, то вот тогда ты получишь панику.

Кроме того, все эти Option<Arc<RefCell<SomeThing>>> иногда начинают напрягать. Особенно когда это накладывается на Result<Result<T, E1>, E2>.

> Если разные ноды принадлежат разным частям структуры (то есть алиасинг исключён), раст позволит это сделать:

Сможет, если он сможет проверить, что они принадлежат разным частям структуры. Выше, в #446, я привёл пример, где борроу-чекер самым тупым образом не справляется. Всё что потребовалось, для того, чтобы получить этот результат -- вынести создание ссылки в функцию. Проблема в том, что приходится сталкиваться с ситуациями, когда я могу доказать, что они всегда будут принадлежать разным частям структуры, а борроу-чекер -- нет. И из-за этого мне приходится либо доставать unsafe, либо скатываться на позорные динамические проверки. Причём, поскольку unsafe отменяет проверки, это значит что когда потом я внесу изменение в какой-нибудь другой код, и так случится что станет возможным создание двух ссылок на один и тот же кусок кода, то борроу-чекер нихрена не проверит, и динамической проверки нет, то есть я тупо впорюсь в баг, достойный C-программиста.

У всех этих проверок есть пределы возможностей, и эти пределы иногда реально путаются под ногами.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
70% проблем с безопасностью в Chromium вызваны ошибками при ..., opennews, 24-Май-20, 14:02  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру