libpurple/tests/test_md5.c

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 37597
c92c6f818320
child 38057
41f47eb1aa19
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.

37593
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
1 #include <glib.h>
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
2
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
3 #include <purple.h>
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
4
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
5 #include "ciphers/md5hash.h"
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
6
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
7 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
8 test_md5hash(gchar *data, gchar *digest) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
9 PurpleHash *hash = NULL;
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
10 gchar cdigest[33];
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
11 gboolean ret = FALSE;
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
12
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
13 hash = purple_md5_hash_new();
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
14
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
15 purple_hash_append(hash, (guchar *)data, strlen(data));
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
16
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
17 ret = purple_hash_digest_to_str(hash, cdigest, sizeof(cdigest));
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
18
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
19 g_assert(ret);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
20 g_assert_cmpstr(digest, ==, cdigest);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
21 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
22
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
23 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
24 test_md5hash_empty_string(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
25 test_md5hash("",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
26 "d41d8cd98f00b204e9800998ecf8427e");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
27 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
28
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
29 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
30 test_md5hash_a(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
31 test_md5hash("a",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
32 "0cc175b9c0f1b6a831c399e269772661");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
33 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
34
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
35 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
36 test_md5hash_abc(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
37 test_md5hash("abc",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
38 "900150983cd24fb0d6963f7d28e17f72");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
39 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
40
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
41 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
42 test_md5hash_message_digest(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
43 test_md5hash("message digest",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
44 "f96b697d7cb7938d525a2f31aaf161d0");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
45 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
46
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
47 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
48 test_md5hash_a_to_z(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
49 test_md5hash("abcdefghijklmnopqrstuvwxyz",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
50 "c3fcd3d76192e4007dfb496cca67e13b");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
51 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
52
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
53 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
54 test_md5hash_A_to_Z_a_to_z_0_to_9(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
55 test_md5hash("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
56 "d174ab98d277d9f5a5611c2c9f419d9f");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
57 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
58
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
59 static void
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
60 test_md5hash_1_to_0_eight_times(void) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
61 test_md5hash("12345678901234567890123456789012345678901234567890123456789012345678901234567890",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
62 "57edf4a22be3c955ac49da2e2107b67a");
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
63 }
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
64
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
65 gint
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
66 main(gint argc, gchar **argv) {
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
67 g_test_init(&argc, &argv, NULL);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
68
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
69 g_test_add_func("/hash/md5/empty-string",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
70 test_md5hash_empty_string);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
71 g_test_add_func("/hash/md5/a",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
72 test_md5hash_a);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
73 g_test_add_func("/hash/md5/abc",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
74 test_md5hash_abc);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
75 g_test_add_func("/hash/md5/message digest",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
76 test_md5hash_message_digest);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
77 g_test_add_func("/hash/md5/a to z",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
78 test_md5hash_a_to_z);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
79 g_test_add_func("/hash/md5/A to Z, a to z, 0 to 9" ,
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
80 test_md5hash_A_to_Z_a_to_z_0_to_9);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
81 g_test_add_func("/hash/md5/1 to 0 eight times",
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
82 test_md5hash_1_to_0_eight_times);
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
83
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
84 return g_test_run();
17c34d87c5b3 Initial conversion to gtester
Gary Kramlich <grim@reaperworld.com>
parents:
diff changeset
85 }

mercurial