Mercurial > crates > nonstick
comparison src/libpam/conversation.rs @ 93:efc2b56c8928
Remove undefined behavior per MIRI.
This replaces a bunch of raw pointers with NonNull and removes all the
undefined behavior that we can find with MIRI.
We also remove the `SecureString` dependency (since it doesn't work with MIRI,
and because it's not really necessary).
| author | Paul Fisher <paul@pfish.zone> |
|---|---|
| date | Mon, 23 Jun 2025 13:02:58 -0400 |
| parents | dd3e9c4bcde3 |
| children | f3e260f9ddcb |
comparison
equal
deleted
inserted
replaced
| 92:5ddbcada30f2 | 93:efc2b56c8928 |
|---|---|
| 1 use crate::conv::{BinaryQAndA, RadioQAndA}; | 1 use crate::conv::{BinaryQAndA, RadioQAndA}; |
| 2 use crate::conv::{Conversation, ErrorMsg, InfoMsg, MaskedQAndA, Message, QAndA}; | 2 use crate::conv::{Conversation, ErrorMsg, InfoMsg, MaskedQAndA, Message, QAndA}; |
| 3 use crate::libpam::answer::BinaryAnswer; | 3 use crate::libpam::answer::BinaryAnswer; |
| 4 use crate::libpam::answer::{Answer, Answers, TextAnswer}; | 4 use crate::libpam::answer::{Answer, Answers, TextAnswer}; |
| 5 use crate::libpam::memory::Immovable; | 5 use crate::libpam::memory::{CBinaryData, Immovable}; |
| 6 use crate::libpam::pam_ffi::AppData; | 6 use crate::libpam::pam_ffi::AppData; |
| 7 pub use crate::libpam::pam_ffi::LibPamConversation; | 7 pub use crate::libpam::pam_ffi::LibPamConversation; |
| 8 use crate::libpam::question::QuestionsTrait; | 8 use crate::libpam::question::QuestionsTrait; |
| 9 use crate::libpam::question::{Question, Questions}; | 9 use crate::libpam::question::{Question, Questions}; |
| 10 use crate::ErrorCode; | 10 use crate::ErrorCode; |
| 137 Message::Error(m) => m.set_answer(Ok(())), | 137 Message::Error(m) => m.set_answer(Ok(())), |
| 138 Message::Info(m) => m.set_answer(Ok(())), | 138 Message::Info(m) => m.set_answer(Ok(())), |
| 139 Message::RadioPrompt(qa) => fill_text!(qa, resp), | 139 Message::RadioPrompt(qa) => fill_text!(qa, resp), |
| 140 Message::BinaryPrompt(qa) => { | 140 Message::BinaryPrompt(qa) => { |
| 141 let bin_resp = unsafe { BinaryAnswer::upcast(resp) }; | 141 let bin_resp = unsafe { BinaryAnswer::upcast(resp) }; |
| 142 qa.set_answer(Ok(bin_resp.data().into())); | 142 qa.set_answer(Ok(bin_resp |
| 143 .data() | |
| 144 .map(|d| unsafe { CBinaryData::as_binary_data(d) }) | |
| 145 .unwrap_or_default())); | |
| 143 bin_resp.zero_contents() | 146 bin_resp.zero_contents() |
| 144 } | 147 } |
| 145 } | 148 } |
| 146 } | 149 } |
