array: Compute new size properly
authorBenjamin Otte <otte@redhat.com>
Wed, 20 Sep 2023 00:46:47 +0000 (02:46 +0200)
committerMatthias Clasen <mclasen@redhat.com>
Thu, 28 Sep 2023 00:42:45 +0000 (20:42 -0400)
Using "1 << x" means that we are shifting a signed 32bit integer, but we
want a gsize, which is an unsigned 64bit integer.

So now we don't overflow anymore if the array reaches a size of 2GB.

gdk/gdkarrayimpl.c

index a18ab5e33d78cd23d121560e9f34b02cb81cae49..408cb3b0d26369fd6e1dbc582539c7eea5ebc4e8 100644 (file)
@@ -151,7 +151,7 @@ gdk_array(reserve) (GdkArray *self,
     return;
 
   size = gdk_array(get_size) (self);
-  new_size = 1 << g_bit_storage (MAX (GDK_ARRAY_REAL_SIZE (n), 16) - 1);
+  new_size = ((gsize) 1) << g_bit_storage (MAX (GDK_ARRAY_REAL_SIZE (n), 16) - 1);
 
 #ifdef GDK_ARRAY_PREALLOC
   if (self->start == self->preallocated)