mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-03 09:46:17 +01:00
GSocketControlMessage: clean up confusing code
It looks like the deserialisation function in GSocketControlMessage can potentially leak a reference to the class structure of a GSocketControlMessage subclass (although the particular code path is probably never hit). Clean up the code a bit. Also, make sure that the GUnixCredentialsMessage type is registered before attempting deserialisation. Closes bug #629687.
This commit is contained in:
parent
02451227ec
commit
6145321680
@ -48,6 +48,7 @@
|
||||
#include "glibintl.h"
|
||||
|
||||
#ifndef G_OS_WIN32
|
||||
#include "gunixcredentialsmessage.h"
|
||||
#include "gunixfdmessage.h"
|
||||
#endif
|
||||
|
||||
@ -172,7 +173,6 @@ g_socket_control_message_deserialize (int level,
|
||||
gsize size,
|
||||
gpointer data)
|
||||
{
|
||||
GSocketControlMessageClass *klass;
|
||||
GSocketControlMessage *message;
|
||||
GType *message_types;
|
||||
guint n_message_types;
|
||||
@ -183,6 +183,7 @@ g_socket_control_message_deserialize (int level,
|
||||
|
||||
/* Ensure we know about the built in types */
|
||||
#ifndef G_OS_WIN32
|
||||
a_type = g_unix_credentials_message_get_type ();
|
||||
a_type = g_unix_fd_message_get_type ();
|
||||
#endif
|
||||
|
||||
@ -191,13 +192,11 @@ g_socket_control_message_deserialize (int level,
|
||||
message = NULL;
|
||||
for (i = 0; i < n_message_types; i++)
|
||||
{
|
||||
klass = (GSocketControlMessageClass *)g_type_class_ref (message_types[i]);
|
||||
GSocketControlMessageClass *class;
|
||||
|
||||
if (klass && klass->deserialize)
|
||||
{
|
||||
message = klass->deserialize (level, type, size, data);
|
||||
g_type_class_unref ((GTypeClass *) klass);
|
||||
}
|
||||
class = g_type_class_ref (message_types[i]);
|
||||
message = class->deserialize (level, type, size, data);
|
||||
g_type_class_unref (class);
|
||||
|
||||
if (message != NULL)
|
||||
break;
|
||||
|
Loading…
Reference in New Issue
Block a user