[gnome-keyring] egg: Fix null termination behavior of egg_secure_strndup()
- From: Daiki Ueno <dueno src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-keyring] egg: Fix null termination behavior of egg_secure_strndup()
- Date: Wed, 21 Feb 2018 15:47:17 +0000 (UTC)
commit 8a2bee5b2ddb424a4b374f6baca4492c0679fed1
Author: Daiki Ueno <dueno src gnome org>
Date: Wed Feb 21 16:42:16 2018 +0100
egg: Fix null termination behavior of egg_secure_strndup()
Even if the given string is shorter than n, the result should be null
terminated. This matches the behavior of strndup().
egg/egg-secure-memory.c | 1 +
egg/test-secmem.c | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+), 0 deletions(-)
---
diff --git a/egg/egg-secure-memory.c b/egg/egg-secure-memory.c
index ac4ce06..4d8b3cc 100644
--- a/egg/egg-secure-memory.c
+++ b/egg/egg-secure-memory.c
@@ -1344,6 +1344,7 @@ egg_secure_strndup_full (const char *tag,
len = length + 1;
res = (char *)egg_secure_alloc_full (tag, len, options);
memcpy (res, str, len);
+ res[length] = '\0';
return res;
}
diff --git a/egg/test-secmem.c b/egg/test-secmem.c
index 58b0d35..54d8136 100644
--- a/egg/test-secmem.c
+++ b/egg/test-secmem.c
@@ -252,6 +252,30 @@ test_strclear (void)
egg_secure_free_full (str, 0);
}
+static void
+test_strndup (void)
+{
+ gchar *str;
+
+ str = egg_secure_strndup ("secret", 6);
+ g_assert (str != NULL);
+ g_assert_cmpuint (strlen (str), ==, 6);
+
+ egg_secure_free_full (str, 0);
+
+ str = egg_secure_strndup ("secret", 10);
+ g_assert (str != NULL);
+ g_assert_cmpuint (strlen (str), ==, 6);
+
+ egg_secure_free_full (str, 0);
+
+ str = egg_secure_strndup ("long secret", 6);
+ g_assert (str != NULL);
+ g_assert_cmpuint (strlen (str), ==, 6);
+
+ egg_secure_free_full (str, 0);
+}
+
int
main (int argc, char **argv)
{
@@ -264,6 +288,7 @@ main (int argc, char **argv)
g_test_add_func ("/secmem/multialloc", test_multialloc);
g_test_add_func ("/secmem/clear", test_clear);
g_test_add_func ("/secmem/strclear", test_strclear);
+ g_test_add_func ("/secmem/strndup", test_strndup);
return g_test_run ();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]