From 7541085589bee16f023790611f1776d6ce667fb6 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 2 May 2019 13:27:53 +0100 Subject: [PATCH 1/3] tests: Increase buffer size for g_strlcat() tests There was a buffer overflow on the last g_strlcat() call in the test. Signed-off-by: Philip Withnall Fixes: #1768 --- glib/tests/strfuncs.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c index 131b33ca3..8644617f6 100644 --- a/glib/tests/strfuncs.c +++ b/glib/tests/strfuncs.c @@ -312,7 +312,7 @@ static void test_strlcat (void) { gchar *str = "The quick brown fox jumps over the lazy dog"; - gchar str_cpy[45] = { 0 }; + gchar str_cpy[60] = { 0 }; gsize str_cpy_size = 0; if (g_test_undefined ()) From 777a6030a6254d5ced98c6b8fe376f91533a453f Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 2 May 2019 13:28:27 +0100 Subject: [PATCH 2/3] tests: Add checks for buffer sizing in g_strlcat() tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Just to ensure we’re passing a valid value for dest_size. Signed-off-by: Philip Withnall Helps: #1768 --- glib/tests/strfuncs.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c index 8644617f6..e3d27e244 100644 --- a/glib/tests/strfuncs.c +++ b/glib/tests/strfuncs.c @@ -340,26 +340,31 @@ test_strlcat (void) * Note that the @dest_size argument to g_strlcat() is normally meant to be * set to `sizeof (dest)`. We set it to various values `≤ sizeof (str_cpy)` * for testing purposes. */ + g_assert_cmpuint (strlen (str) + 1, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str) + 1); g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, strlen (str)); + g_assert_cmpuint (strlen (str), <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str)); g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, 2 * strlen (str)); + g_assert_cmpuint (strlen (str) - 15, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str) - 15); g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, 2 * strlen (str) - 15); + g_assert_cmpuint (0, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, 0); g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, strlen (str)); + g_assert_cmpuint (strlen (str) + 15, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str) + 15); g_assert_nonnull (str_cpy); g_assert_cmpstr ("The quick brown fox jumps over the lazy dogThe quick brow", From 81ba6e54fe7ecbf1b8e179ca103c78a1bd9de7b5 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Thu, 2 May 2019 13:28:55 +0100 Subject: [PATCH 3/3] tests: Remove redundant non-NULL checks in g_strlcat() test The buffer is a local array, not a pointer, so can never be NULL. Signed-off-by: Philip Withnall --- glib/tests/strfuncs.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/glib/tests/strfuncs.c b/glib/tests/strfuncs.c index e3d27e244..e1f9619c7 100644 --- a/glib/tests/strfuncs.c +++ b/glib/tests/strfuncs.c @@ -342,31 +342,26 @@ test_strlcat (void) * for testing purposes. */ g_assert_cmpuint (strlen (str) + 1, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str) + 1); - g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, strlen (str)); g_assert_cmpuint (strlen (str), <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str)); - g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, 2 * strlen (str)); g_assert_cmpuint (strlen (str) - 15, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str) - 15); - g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, 2 * strlen (str) - 15); g_assert_cmpuint (0, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, 0); - g_assert_nonnull (str_cpy); g_assert_cmpstr (str, ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, strlen (str)); g_assert_cmpuint (strlen (str) + 15, <=, sizeof (str_cpy)); str_cpy_size = g_strlcat (str_cpy, str, strlen (str) + 15); - g_assert_nonnull (str_cpy); g_assert_cmpstr ("The quick brown fox jumps over the lazy dogThe quick brow", ==, str_cpy); g_assert_cmpint (str_cpy_size, ==, 2 * strlen (str));