Warn when classes/instances exceed the allowed size, if possible
authorSimon McVittie <simon.mcvittie@collabora.co.uk>
Mon, 3 Oct 2011 17:48:15 +0000 (18:48 +0100)
committerSimon McVittie <simon.mcvittie@collabora.co.uk>
Tue, 4 Oct 2011 08:35:54 +0000 (09:35 +0100)
It's impossible to check this if the library user is using
g_type_register_static, but in that case their compiler should hopefully
warn about the truncation. This fixes it for G_DEFINE_TYPE and friends,
at least.

Bug: https://bugzilla.gnome.org/show_bug.cgi?id=659916
Signed-off-by: Simon McVittie <simon.mcvittie@collabora.co.uk>
Reviewed-by: Colin Walters <walters@verbum.org>
gobject/gtype.c

index a966200..a362fd5 100644 (file)
@@ -2667,6 +2667,12 @@ g_type_register_static_simple (GType             parent_type,
 {
   GTypeInfo info;
 
+  /* Instances are not allowed to be larger than this. If you have a big
+   * fixed-length array or something, point to it instead.
+   */
+  g_return_val_if_fail (class_size <= G_MAXUINT16, G_TYPE_INVALID);
+  g_return_val_if_fail (instance_size <= G_MAXUINT16, G_TYPE_INVALID);
+
   info.class_size = class_size;
   info.base_init = NULL;
   info.base_finalize = NULL;