Можно ли вернуть одну строку, если вызов функции находится в pani c :: catch_unwind в ржавчине? - PullRequest
0 голосов
/ 01 мая 2020

Мой код:

let result= panic::catch_unwind( || {
   do_olr(
      &payload_buffer[..],
      args.cmd_collect
   );
});

if !result.is_ok() {
    error!("Premature end of payload$")
}

Я бы хотел сохранить catch_unwind по соображениям безопасности, но все же вернуть значение. так что есть что-то вроде этого:

let val = do_olr(
   &payload_buffer[..],
   args.cmd_collect
);

это возможно?

1 Ответ

1 голос
/ 01 мая 2020

std::panic::catch_unwind возвращает любое возвращенное закрытие в случае, если оно не запанировало c:

fn main() {
    let result = std::panic::catch_unwind(|| {
        println!("hello!");

        42
    });
    println!("{:?}", result);

    let result = std::panic::catch_unwind(|| {
        panic!("oh no!");
    });
    println!("{:?}", result);
}

( Постоянная ссылка на игровую площадку )

Это отпечатки

hello!
Ok(42)
Err(Any)

Я хотел бы сохранить catch_unwind по соображениям безопасности

Я не очень понимаю, как catch_unwind помогает с безопасностью : Если вы выполняете неизвестный код, он может завершить вашу программу способами, которые невозможно перехватить с помощью catch_unwind даже в безопасном коде . Нет абсолютно никакой гарантии, что catch_unwind будет вызван. catch_unwind не обеспечивает никакой изоляции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...