libpurple/protocols/msn/command.h

Mon, 12 Sep 2016 08:55:35 -0500

author
Mike Ruprecht <cmaiku@gmail.com>
date
Mon, 12 Sep 2016 08:55:35 -0500
changeset 38142
1dff6e343f9f
parent 34304
faf0414a8b51
permissions
-rw-r--r--

gg: Protect against issues when closing while connecting

Since the GIOStream is cancelled when data is freed, any cancelled
callbacks are called after such data is freed. This patch guards against
cancelled calls by safely returning without accessing any freed data if
the connection has been cancelled (aka closed).

Futhermore, if GG tries to connect and is quickly disconnected,
ggp_tcpsocket_close() is never called. As far as I can tell, it's an
existing bug, but PurpleSockets both work differently when closing and
are closed by the connection if any leak. So the issue wasn't a major
problem. This patch lessens the issue by guarding against it, but it
should be fixed at some point.

8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /**
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 * @file command.h MSN command functions
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
4 * purple
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
9198
e8eb6d5eb9eb [gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents: 9193
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
e8eb6d5eb9eb [gaim-migrate @ 9993]
Christian Hammond <chipx86@chipx86.com>
parents: 9193
diff changeset
8 * source distribution.
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 *
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 * (at your option) any later version.
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
14 *
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18 * GNU General Public License for more details.
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 *
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
19859
71d37b57eff2 The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents: 15884
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
23 */
29305
202cb72ed5b0 Minor header file cleanup. Mostly I wanted to move some enums above some #includes
Mark Doliner <markdoliner@pidgin.im>
parents: 24438
diff changeset
24 #ifndef MSN_COMMAND_H
202cb72ed5b0 Minor header file cleanup. Mostly I wanted to move some enums above some #includes
Mark Doliner <markdoliner@pidgin.im>
parents: 24438
diff changeset
25 #define MSN_COMMAND_H
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
26
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27 typedef struct _MsnCommand MsnCommand;
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29 #include "cmdproc.h"
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30 #include "transaction.h"
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31
9193
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
32 typedef void (*MsnPayloadCb)(MsnCmdProc *cmdproc, MsnCommand *cmd,
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
33 char *payload, size_t len);
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35 /**
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 * A received command.
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
37 */
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
38 struct _MsnCommand
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 {
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40 unsigned int trId;
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 char *command;
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 char **params;
34304
faf0414a8b51 Fix most of libpurple warnings about -Wsign-compare
Tomasz Wasilczyk <tomkiewicz@cpw.pidgin.im>
parents: 31240
diff changeset
44 guint param_count;
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
45
31235
d347d296b0e6 As Mark did before, we probably don't need a return value from these
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30914
diff changeset
46 guint ref_count;
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48 MsnTransaction *trans;
9193
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
49
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
50 char *payload;
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
51 size_t payload_len;
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
52
6e76f1367896 [gaim-migrate @ 9988]
Felipe Contreras <felipe.contreras@gmail.com>
parents: 8810
diff changeset
53 MsnPayloadCb payload_cb;
24438
f516df0c0926 Apply khc's patch for ADL error 205, with a few changes to get around
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 19859
diff changeset
54 void *payload_cbdata;
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 };
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56
30912
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
57 /**
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
58 * Create a command object from the incoming string and ref it.
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
59 *
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
60 * @param string The incoming string.
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
61 *
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
62 * @return A MsnCommand object.
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
63 */
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64 MsnCommand *msn_command_from_string(const char *string);
30912
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
65
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
66 /**
30914
24c47e42518a Fix a few little things.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30912
diff changeset
67 * Increment the ref count.
30912
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
68 *
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
69 * @param cmd The MsnCommand to be ref.
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
70 *
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
71 * @return The ref command.
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
72 */
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 MsnCommand *msn_command_ref(MsnCommand *cmd);
30912
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
74
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
75 /**
30914
24c47e42518a Fix a few little things.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30912
diff changeset
76 * Decrement the ref count. If the count goes to 0, destroy it.
30912
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
77 *
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
78 * @param cmd The MsnCommand to be unref.
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
79 *
d2d8dcbc99a9 msn: Document command.h
Jorge Villaseñor <masca@cpw.pidgin.im>
parents: 29305
diff changeset
80 */
31235
d347d296b0e6 As Mark did before, we probably don't need a return value from these
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30914
diff changeset
81 void msn_command_unref(MsnCommand *cmd);
8810
2240097956a7 [gaim-migrate @ 9572]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82
29305
202cb72ed5b0 Minor header file cleanup. Mostly I wanted to move some enums above some #includes
Mark Doliner <markdoliner@pidgin.im>
parents: 24438
diff changeset
83 #endif /* MSN_COMMAND_H */
31235
d347d296b0e6 As Mark did before, we probably don't need a return value from these
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 30914
diff changeset
84

mercurial