Size: a a a

Rust — русскоговорящее сообщество

2021 June 27

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
В f
источник

Э

Эрик in Rust — русскоговорящее сообщество
Ну ок, а теперь поставь catch_unwind так, чтобы можно было наблюдать эту невалидную память.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообщество
Ну по-моему тут и в happy case в вектор пушится невалидное значение
источник

goldstein опять in Rust — русскоговорящее сообщество
f() паникует и оставляет вектор с увеличенной длиной
источник

Э

Эрик in Rust — русскоговорящее сообщество
Meh, ненавижу писать ансейф. Ну да, у меня натурально в любом случае тыква получается.
источник

goldstein опять in Rust — русскоговорящее сообщество
но я не уверен, что тут не происходит мгновенного UB на строчке с set_len
источник

goldstein опять in Rust — русскоговорящее сообщество
да, тут происходит мгновенное UB на строчке с set_len.
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Ну не знаю, лень. В кетч анвайде мутекс передать по ссылке, там инплейс передать паникующее замыкание.
источник

goldstein опять in Rust — русскоговорящее сообщество
потому что set_len требует, чтобы все новые элементы были уже инициализированы
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Не происходит
источник

goldstein опять in Rust — русскоговорящее сообщество
происходит, ты нарушаешь инвариант set_len
источник

goldstein опять in Rust — русскоговорящее сообщество
> The elements at old_len..new_len must be initialized.
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Инварианты можно нарушать до выхода из функции
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Мы тут просто не доверяем сейф коду
источник

goldstein опять in Rust — русскоговорящее сообщество
ты нарушаешь входной инвариант set_len.
источник

goldstein опять in Rust — русскоговорящее сообщество
т. е. set_len внутри себя имеет право, например, вытащить новый элемент и положить в переменную.
источник

goldstein опять in Rust — русскоговорящее сообщество
получив неинициализированную переменную и UB.
источник

Э

Эрик in Rust — русскоговорящее сообщество
Ну вот, а теперь представь, что селект у тебя кетчит это говно, а await паникует при кенселе.
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
В приватном апи можно нарушать как приватные инварианты, так и некоторые, касающиеся safety. Но не всегда желательно.
источник

TK

Traveller Kolsky in Rust — русскоговорящее сообщество
Даже специально разделение есть на типы нарушений инвариантов, которые можно и нельзя
источник