aboutsummaryrefslogtreecommitdiff
path: root/src/util.rs
diff options
context:
space:
mode:
authorRobin Krahl <robin.krahl@ireas.org>2019-01-23 04:27:14 +0000
committerRobin Krahl <robin.krahl@ireas.org>2019-01-23 05:30:23 +0100
commitd4663961c41a0fb6f81f4a54aefd0fedce49d350 (patch)
tree2622fdecee2dd3c2926118cad296e2c0772fedd1 /src/util.rs
parentc79ddf8116659efd1aa7de42bb85337632f238dd (diff)
downloadnitrokey-rs-d4663961c41a0fb6f81f4a54aefd0fedce49d350.tar.gz
nitrokey-rs-d4663961c41a0fb6f81f4a54aefd0fedce49d350.tar.bz2
Return UTF-8 error if libnitrokey returns an invalid string
Previously, we used lossy UTF-8 conversion. Yet the user should be notified if we have a problem instead of silently changing the data. Therefore, we now return an error if we enocunter an invalid UTF-8 string. This leads to a change in `get_library_version`’s signature.
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/util.rs b/src/util.rs
index f8ad9c9..64dde39 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -28,17 +28,18 @@ pub enum LogLevel {
DebugL2,
}
-pub fn owned_str_from_ptr(ptr: *const c_char) -> String {
+pub fn owned_str_from_ptr(ptr: *const c_char) -> Result<String, Error> {
unsafe { CStr::from_ptr(ptr) }
- .to_string_lossy()
- .into_owned()
+ .to_str()
+ .map(String::from)
+ .map_err(Error::from)
}
pub fn result_from_string(ptr: *const c_char) -> Result<String, Error> {
if ptr.is_null() {
return Err(Error::UnexpectedError);
}
- let s = owned_str_from_ptr(ptr);
+ let s = owned_str_from_ptr(ptr)?;
unsafe { free(ptr as *mut c_void) };
// An empty string can both indicate an error or be a valid return value. In this case, we
// have to check the last command status to decide what to return.