summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGary Kramlich <grim@reaperworld.com>2016-06-12 22:11:59 -0500
committerGary Kramlich <grim@reaperworld.com>2016-06-12 22:11:59 -0500
commit9bc29eb2dfe1db46807d0e5c24d62f3cbdee526e (patch)
tree1df2e958e598987a58bb0675aea4cf8b2570efc6
parent812d34a1fbb9f990edf1a6d96158e1a8db3a7953 (diff)
parent31ea530ec147c85f4e9188f18b4ec6611244d58d (diff)
downloadpidgin-9bc29eb2dfe1db46807d0e5c24d62f3cbdee526e.tar.gz
Merged TALOS-CAN-0133
-rw-r--r--ChangeLog3
-rw-r--r--libpurple/protocols/mxit/formcmds.c20
2 files changed, 17 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index b9ffab1d4f..b93cc7d03a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -28,6 +28,9 @@ version 2.10.13 (MM/DD/YY):
(TALOS-CAN-0123)
* Fixed a directory traversal issue. Discovered by Yves Younan of Cisco
Talos (TALOS-CAN-0128)
+ * Fixed a remote denial of service vulnerability that could result in
+ a null pointer dereference. Discovered by Yves Younan of Cisco Talos.
+ (TALOS-CAN-0133)
version 2.10.12 (12/31/15):
General:
diff --git a/libpurple/protocols/mxit/formcmds.c b/libpurple/protocols/mxit/formcmds.c
index 0e60a6a02a..ad7681aafa 100644
--- a/libpurple/protocols/mxit/formcmds.c
+++ b/libpurple/protocols/mxit/formcmds.c
@@ -395,6 +395,9 @@ static void command_imagestrip(struct MXitSession* session, const char* from, GH
/* validator */
validator = g_hash_table_lookup(hash, "v");
+ if (!name || !validator)
+ return;
+
/* image data */
tmp = g_hash_table_lookup(hash, "dat");
if (tmp) {
@@ -430,13 +433,13 @@ static void command_imagestrip(struct MXitSession* session, const char* from, GH
}
tmp = g_hash_table_lookup(hash, "fw");
- width = atoi(tmp);
+ width = (tmp ? atoi(tmp) : 0);
tmp = g_hash_table_lookup(hash, "fh");
- height = atoi(tmp);
+ height = (tmp ? atoi(tmp) : 0);
tmp = g_hash_table_lookup(hash, "layer");
- layer = atoi(tmp);
+ layer = (tmp ? atoi(tmp) : 0);
purple_debug_info(MXIT_PLUGIN_ID, "ImageStrip %s from %s: [w=%i h=%i l=%i validator=%s]\n", name, from, width, height, layer, validator);
}
@@ -525,21 +528,26 @@ static void command_table(struct RXMsgData* mx, GHashTable* hash)
/* table name */
name = g_hash_table_lookup(hash, "nm");
+ if (!name)
+ return;
/* number of columns */
tmp = g_hash_table_lookup(hash, "col");
- nr_columns = atoi(tmp);
+ nr_columns = (tmp ? atoi(tmp) : 0);
/* number of rows */
tmp = g_hash_table_lookup(hash, "row");
- nr_rows = atoi(tmp);
+ nr_rows = (tmp ? atoi(tmp) : 0);
/* mode */
tmp = g_hash_table_lookup(hash, "mode");
- mode = atoi(tmp);
+ mode = (tmp ? atoi(tmp) : 0);
/* table data */
tmp = g_hash_table_lookup(hash, "d");
+ if (!tmp)
+ tmp = "";
+
coldata = g_strsplit(tmp, "~", 0); /* split into entries for each row & column */
purple_debug_info(MXIT_PLUGIN_ID, "Table %s from %s: [cols=%i rows=%i mode=%i]\n", name, mx->from, nr_columns, nr_rows, mode);