# HG changeset patch # User Stu Tomlinson # Date 1141742580 0 # Node ID efd3f93a220f7d22606c2693133ea7eb40171200 # Parent fd606401a8d2a2b7f6f16a169bd6d50b00ee6d37 [gaim-migrate @ 15828] Fix CIDs 33, 34 & 35 (NULL dereferencing), 60 (fd leak) and 61 (memleak) committer: Tailor Script diff -r fd606401a8d2 -r efd3f93a220f src/protocols/zephyr/zephyr.c --- a/src/protocols/zephyr/zephyr.c Tue Mar 07 14:10:52 2006 +0000 +++ b/src/protocols/zephyr/zephyr.c Tue Mar 07 14:43:00 2006 +0000 @@ -254,23 +254,38 @@ static gboolean triple_subset(zephyr_triple * zt1, zephyr_triple * zt2) { - if (!zt2) + if (!zt2) { gaim_debug_error("zephyr","zt2 doesn't exist\n"); - if (!zt1) + return FALSE; + } + if (!zt1) { gaim_debug_error("zephyr","zt1 doesn't exist\n"); - if (!(zt1->class)) + return FALSE; + } + if (!(zt1->class)) { gaim_debug_error("zephyr","zt1c doesn't exist\n"); - if (!(zt1->instance)) + return FALSE; + } + if (!(zt1->instance)) { gaim_debug_error("zephyr","zt1i doesn't exist\n"); - if (!(zt1->recipient)) + return FALSE; + } + if (!(zt1->recipient)) { gaim_debug_error("zephyr","zt1r doesn't exist\n"); - if (!(zt2->class)) + return FALSE; + } + if (!(zt2->class)) { gaim_debug_error("zephyr","zt2c doesn't exist\n"); - if (!(zt2->recipient)) + return FALSE; + } + if (!(zt2->recipient)) { gaim_debug_error("zephyr","zt2r doesn't exist\n"); - if (!(zt2->instance)) + return FALSE; + } + if (!(zt2->instance)) { gaim_debug_error("zephyr","zt2i doesn't exist\n"); - + return FALSE; + } if (g_ascii_strcasecmp(zt2->class, zt1->class)) { return FALSE; @@ -732,9 +747,9 @@ g_string_free(str, TRUE); } else { if (nlocs>0) - gaim_prpl_got_user_status(gc->account,b->name,"available",NULL); + gaim_prpl_got_user_status(gc->account, b ? b->name : user, "available", NULL); else - gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); + gaim_prpl_got_user_status(gc->account, b ? b->name : user, "offline", NULL); } g_free(user); @@ -917,11 +932,13 @@ static parse_tree *find_node(parse_tree* ptree,gchar* key) { - gchar* tc = tree_child(ptree,0)->contents; + gchar* tc; if (!ptree || ! key) return &null_parse_tree; + tc = tree_child(ptree,0)->contents; + if (ptree->num_children > 0 && tc && !strcasecmp(tc, key)) { return ptree; } else { @@ -1148,9 +1165,9 @@ g_string_free(str, TRUE); } else { if (nlocs>0) - gaim_prpl_got_user_status(gc->account,b->name,"available",NULL); + gaim_prpl_got_user_status(gc->account, b ? b->name : user, "available", NULL); else - gaim_prpl_got_user_status(gc->account,b->name,"offline",NULL); + gaim_prpl_got_user_status(gc->account, b ? b->name : user, "offline", NULL); } } else if (!g_ascii_strncasecmp(spewtype,"subscribed",10)) { @@ -1459,6 +1476,7 @@ g_strfreev(triple); } } + fclose(f); } } @@ -1668,6 +1686,7 @@ } if (ptr >=bufcur) { gaim_connection_error(gc,"invalid output by tzc (or bad parsing code)"); + free(buf); return; } @@ -1758,8 +1777,9 @@ } if (parenlevel==0) break; - } /* while (ptr < bufcur) { */ + } /* while (ptr < bufcur) */ gaim_debug_info("zephyr", "tzc startup done\n"); + free(buf); } } else if ( use_zeph02(zephyr)) {