diff options
authorRobin Krahl <me@robin-krahl.de>2018-07-08 00:37:20 +0200
committerRobin Krahl <robin.krahl@ireas.org>2018-12-10 14:36:40 +0100
commitc1e6bcb3e448962b5f4cf4453e629eae1a82b943 (patch)
parent0c0b99880ded2ebb7f2cca68bceb94ec1b82843e (diff)
Always free string pointers returned by libnitrokey
Old libnitrokey versions could return pointers to both statically and dynamically allocated strings for functions that return strings. This has been fixed in libnitrokey commit 7a8550d (included in v3.4). This patch removes the old workaround and always frees the return value of functions returning a string pointer.
2 files changed, 1 insertions, 4 deletions
diff --git a/TODO.md b/TODO.md
index 7119c8f..58d923b 100644
--- a/TODO.md
+++ b/TODO.md
@@ -34,8 +34,6 @@
- Fix timing issues with the `totp_no_pin` and `totp_pin` test cases.
- Clear passwords from memory.
- Find a nicer syntax for the `write_config` test.
-- Fix segmentation faults when freeing string literals with old Nitrokey
- versions (fixed in libnitrokey commit 7a8550d).
- Prevent construction of internal types.
- Add Storage-only examples to the `DeviceWrapper` documentation.
- Fix generic connection (`get_connected_device`).
diff --git a/src/util.rs b/src/util.rs
index d764baa..6f4fbb0 100644
--- a/src/util.rs
+++ b/src/util.rs
@@ -73,11 +73,10 @@ pub fn result_from_string(ptr: *const c_char) -> Result<String, CommandError> {
unsafe {
let s = owned_str_from_ptr(ptr);
+ free(ptr as *mut c_void);
if s.is_empty() {
return Err(get_last_error());
- // TODO: move up for newer libnitrokey versions
- free(ptr as *mut c_void);
return Ok(s);