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 } |