Enable ubsan in ci
We are really close to being able to turn on ubsan in the sanitizer build in ci. The one thing holding it up is:
../gtk/gtkcssselector.c: In function ‘gtk_css_selector_new’:
../gtk/gtkcssselector.c:922:5: error: ‘memmove’ offset [0, 23] is out of the bounds [0, 0] [-Werror=array-bounds=]
922 | memmove (selector + 1, selector, sizeof (GtkCssSelector) * size + sizeof (gpointer));
| ^~~~~
Enabling ubsan makes the build fail here, and despite my best effort, I have not been able to rewrite the function in a way that avoids it:
static GtkCssSelector *
gtk_css_selector_new (const GtkCssSelectorClass *class,
GtkCssSelector *selector)
{
guint size;
size = gtk_css_selector_size (selector);
selector = g_realloc (selector, sizeof (GtkCssSelector) * (size + 1) + sizeof (gpointer));
if (size == 0)
selector[1].class = NULL;
else
memmove (selector + 1, selector, sizeof (GtkCssSelector) * size + sizeof (gpointer));
memset (selector, 0, sizeof (GtkCssSelector));
selector->class = class;
return selector;
}
Any help would be appreciated.