Merge branch 'scanner-undefined-behaviour' into 'master'

gscanner: Avoid undefined behaviour copying between union members

See merge request GNOME/glib!1737
This commit is contained in:
Emmanuele Bassi 2020-11-03 17:25:04 +00:00
commit 63dfceedd2

View File

@ -1696,12 +1696,19 @@ g_scanner_get_token_i (GScanner *scanner,
scanner->config->int_2_float)
{
*token_p = G_TOKEN_FLOAT;
/* Have to assign through a temporary variable to avoid undefined behaviour
* by copying between potentially-overlapping union members. */
if (scanner->config->store_int64)
{
value_p->v_float = value_p->v_int64;
gint64 temp = value_p->v_int64;
value_p->v_float = temp;
}
else
value_p->v_float = value_p->v_int;
{
gint temp = value_p->v_int;
value_p->v_float = temp;
}
}
errno = 0;