comparison finch/gntblist.c @ 24482:0f7a248848ed

Properly escape the status message. Fixes #7630.
author Sadrul Habib Chowdhury <imadil@gmail.com>
date Wed, 26 Nov 2008 00:41:53 +0000
parents a4a7084ee09d
children 125cac3e24ee 9bdd3ab8087f e0c8f689f60c
comparison
equal deleted inserted replaced
24481:15db3067a5ac 24482:0f7a248848ed
2205 static gboolean 2205 static gboolean
2206 remove_typing_cb(gpointer null) 2206 remove_typing_cb(gpointer null)
2207 { 2207 {
2208 PurpleSavedStatus *current; 2208 PurpleSavedStatus *current;
2209 const char *message, *newmessage; 2209 const char *message, *newmessage;
2210 char *escnewmessage;
2210 PurpleStatusPrimitive prim, newprim; 2211 PurpleStatusPrimitive prim, newprim;
2211 StatusBoxItem *item; 2212 StatusBoxItem *item;
2212 2213
2213 current = purple_savedstatus_get_current(); 2214 current = purple_savedstatus_get_current();
2214 message = purple_savedstatus_get_message(current); 2215 message = purple_savedstatus_get_message(current);
2215 prim = purple_savedstatus_get_type(current); 2216 prim = purple_savedstatus_get_type(current);
2216 2217
2217 newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext)); 2218 newmessage = gnt_entry_get_text(GNT_ENTRY(ggblist->statustext));
2218 item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status)); 2219 item = gnt_combo_box_get_selected_data(GNT_COMBO_BOX(ggblist->status));
2220 escnewmessage = newmessage ? g_markup_escape_text(newmessage, -1) : NULL;
2219 2221
2220 switch (item->type) { 2222 switch (item->type) {
2221 case STATUS_PRIMITIVE: 2223 case STATUS_PRIMITIVE:
2222 newprim = item->u.prim; 2224 newprim = item->u.prim;
2223 break; 2225 break;
2226 break; 2228 break;
2227 default: 2229 default:
2228 goto end; /* 'New' or 'Saved' is selected, but this should never happen. */ 2230 goto end; /* 'New' or 'Saved' is selected, but this should never happen. */
2229 } 2231 }
2230 2232
2231 if (newprim != prim || ((message && !newmessage) || 2233 if (newprim != prim || ((message && !escnewmessage) ||
2232 (!message && newmessage) || 2234 (!message && escnewmessage) ||
2233 (message && newmessage && g_utf8_collate(message, newmessage) != 0))) 2235 (message && escnewmessage && g_utf8_collate(message, escnewmessage) != 0)))
2234 { 2236 {
2235 PurpleSavedStatus *status = purple_savedstatus_find_transient_by_type_and_message(newprim, newmessage); 2237 PurpleSavedStatus *status = purple_savedstatus_find_transient_by_type_and_message(newprim, escnewmessage);
2236 /* Holy Crap! That's a LAWNG function name */ 2238 /* Holy Crap! That's a LAWNG function name */
2237 if (status == NULL) 2239 if (status == NULL)
2238 { 2240 {
2239 status = purple_savedstatus_new(NULL, newprim); 2241 status = purple_savedstatus_new(NULL, newprim);
2240 purple_savedstatus_set_message(status, newmessage); 2242 purple_savedstatus_set_message(status, escnewmessage);
2241 } 2243 }
2242 2244
2243 purple_savedstatus_activate(status); 2245 purple_savedstatus_activate(status);
2244 } 2246 }
2245 2247
2246 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree); 2248 gnt_box_give_focus_to_child(GNT_BOX(ggblist->window), ggblist->tree);
2247 end: 2249 end:
2250 g_free(escnewmessage);
2248 if (ggblist->typing) 2251 if (ggblist->typing)
2249 g_source_remove(ggblist->typing); 2252 g_source_remove(ggblist->typing);
2250 ggblist->typing = 0; 2253 ggblist->typing = 0;
2251 return FALSE; 2254 return FALSE;
2252 } 2255 }