mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	Merge branch 'array_elt_size_zero' into 'main'
garray: Add more element_size > 0 checks See merge request GNOME/glib!4695
This commit is contained in:
		@@ -185,7 +185,7 @@ g_array_new_take (gpointer  data,
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (data != NULL || len == 0, NULL);
 | 
			
		||||
  g_return_val_if_fail (len <= G_MAXUINT, NULL);
 | 
			
		||||
  g_return_val_if_fail (element_size <= G_MAXUINT, NULL);
 | 
			
		||||
  g_return_val_if_fail (element_size > 0 && element_size <= G_MAXUINT, NULL);
 | 
			
		||||
 | 
			
		||||
  array = g_array_sized_new (FALSE, clear, element_size, 0);
 | 
			
		||||
  rarray = (GRealArray *) array;
 | 
			
		||||
@@ -237,7 +237,7 @@ g_array_new_take_zero_terminated (gpointer  data,
 | 
			
		||||
  GArray *array;
 | 
			
		||||
  gsize len = 0;
 | 
			
		||||
 | 
			
		||||
  g_return_val_if_fail (element_size <= G_MAXUINT, NULL);
 | 
			
		||||
  g_return_val_if_fail (element_size > 0 && element_size <= G_MAXUINT, NULL);
 | 
			
		||||
 | 
			
		||||
  if (data != NULL)
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -321,6 +321,21 @@ array_new_take_zero_terminated (void)
 | 
			
		||||
  g_clear_pointer (&old_data_copy, g_free);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Check that zero terminated arrays with zero size elements are not allowed. */
 | 
			
		||||
static void
 | 
			
		||||
array_new_take_zero_terminated_zero_size (void)
 | 
			
		||||
{
 | 
			
		||||
  gpointer str = g_strdup ("not null");
 | 
			
		||||
 | 
			
		||||
  g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
 | 
			
		||||
                         "*assertion 'element_size > 0 && element_size <= G_MAXUINT' failed");
 | 
			
		||||
  g_assert_null (
 | 
			
		||||
      g_array_new_take_zero_terminated (str, FALSE, 0));
 | 
			
		||||
  g_test_assert_expected_messages ();
 | 
			
		||||
 | 
			
		||||
  g_free (str);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Check that a non-existing array becomes a zero-terminated one when requested. */
 | 
			
		||||
static void
 | 
			
		||||
array_new_take_zero_terminated_null (void)
 | 
			
		||||
@@ -358,13 +373,24 @@ array_new_take_overflow (void)
 | 
			
		||||
  g_test_assert_expected_messages ();
 | 
			
		||||
 | 
			
		||||
  g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
 | 
			
		||||
                         "*assertion 'element_size <= G_MAXUINT' failed");
 | 
			
		||||
                         "*assertion 'element_size > 0 && element_size <= G_MAXUINT' failed");
 | 
			
		||||
  g_assert_null (
 | 
			
		||||
    g_array_new_take (NULL, 0, FALSE, (gsize) G_MAXUINT + 1));
 | 
			
		||||
  g_test_assert_expected_messages ();
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Check that arrays with zero size elements are not allowed. */
 | 
			
		||||
static void
 | 
			
		||||
array_new_take_zero_size (void)
 | 
			
		||||
{
 | 
			
		||||
  g_test_expect_message (G_LOG_DOMAIN, G_LOG_LEVEL_CRITICAL,
 | 
			
		||||
                         "*assertion 'element_size > 0 && element_size <= G_MAXUINT' failed");
 | 
			
		||||
  g_assert_null (
 | 
			
		||||
      g_array_new_take (NULL, 0, FALSE, 0));
 | 
			
		||||
  g_test_assert_expected_messages ();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Check g_array_steal() function */
 | 
			
		||||
static void
 | 
			
		||||
array_steal (void)
 | 
			
		||||
@@ -3241,7 +3267,9 @@ main (int argc, char *argv[])
 | 
			
		||||
  g_test_add_func ("/array/new/take", array_new_take);
 | 
			
		||||
  g_test_add_func ("/array/new/take/empty", array_new_take_empty);
 | 
			
		||||
  g_test_add_func ("/array/new/take/overflow", array_new_take_overflow);
 | 
			
		||||
  g_test_add_func ("/array/new/take/zero-size", array_new_take_zero_size);
 | 
			
		||||
  g_test_add_func ("/array/new/take-zero-terminated", array_new_take_zero_terminated);
 | 
			
		||||
  g_test_add_func ("/array/new/take-zero-terminated/zero-size", array_new_take_zero_terminated_zero_size);
 | 
			
		||||
  g_test_add_func ("/array/new/take-zero-terminated/null", array_new_take_zero_terminated_null);
 | 
			
		||||
  g_test_add_func ("/array/ref-count", array_ref_count);
 | 
			
		||||
  g_test_add_func ("/array/steal", array_steal);
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user