comparison src/util.c @ 7675:66d9440db6ec

[gaim-migrate @ 8319] marv writes: "This fixes some crashes on unusual long profile fields for yahoo, and probably msn. One test case is the yahoo [l]user "kent_nwo4life", which crashes without this patch." committer: Tailor Script <tailor@pidgin.im>
author Luke Schierer <lschiere@pidgin.im>
date Sun, 30 Nov 2003 23:49:45 +0000
parents 42e5d2f4e4b1
children 1363f91da9cc
comparison
equal deleted inserted replaced
7674:3d49c33db741 7675:66d9440db6ec
432 432
433 return found; 433 return found;
434 } 434 }
435 435
436 gboolean 436 gboolean
437 gaim_markup_extract_info_field(const char *str, char *dest_buffer, 437 gaim_markup_extract_info_field(const char *str, int len, GString *dest,
438 const char *start_token, int skip, 438 const char *start_token, int skip,
439 const char *end_token, char check_value, 439 const char *end_token, char check_value,
440 const char *no_value_token, 440 const char *no_value_token,
441 const char *display_name, gboolean is_link, 441 const char *display_name, gboolean is_link,
442 const char *link_prefix) 442 const char *link_prefix)
443 { 443 {
444 const char *p, *q; 444 const char *p, *q;
445 char buf[1024];
446 445
447 g_return_val_if_fail(str != NULL, FALSE); 446 g_return_val_if_fail(str != NULL, FALSE);
448 g_return_val_if_fail(dest_buffer != NULL, FALSE); 447 g_return_val_if_fail(dest != NULL, FALSE);
449 g_return_val_if_fail(start_token != NULL, FALSE); 448 g_return_val_if_fail(start_token != NULL, FALSE);
450 g_return_val_if_fail(end_token != NULL, FALSE); 449 g_return_val_if_fail(end_token != NULL, FALSE);
451 g_return_val_if_fail(display_name != NULL, FALSE); 450 g_return_val_if_fail(display_name != NULL, FALSE);
452 451
453 p = strstr(str, start_token); 452 p = strstr(str, start_token);
454 453
455 if (p == NULL) 454 if (p == NULL)
456 return FALSE; 455 return FALSE;
457 456
458 p += strlen(start_token) + skip; 457 p += strlen(start_token) + skip;
458
459 if (p >= str + len)
460 return FALSE;
459 461
460 if (check_value != '\0' && *p == check_value) 462 if (check_value != '\0' && *p == check_value)
461 return FALSE; 463 return FALSE;
462 464
463 q = strstr(p, end_token); 465 q = strstr(p, end_token);
464 466
465 if (q != NULL && (!no_value_token || 467 if (q != NULL && (!no_value_token ||
466 (no_value_token && strncmp(p, no_value_token, 468 (no_value_token && strncmp(p, no_value_token,
467 strlen(no_value_token))))) 469 strlen(no_value_token)))))
468 { 470 {
469 strcat(dest_buffer, "<b>"); 471 g_string_append(dest, "<b>");
470 strcat(dest_buffer, display_name); 472 g_string_append(dest, display_name);
471 strcat(dest_buffer, ":</b> "); 473 g_string_append(dest, ":</b> ");
472 474
473 if (is_link) 475 if (is_link)
474 { 476 {
475 strcat(dest_buffer, "<br><a href=\""); 477 g_string_append(dest, "<br><a href=\"");
476 memcpy(buf, p, q - p);
477 buf[q - p] = '\0';
478 478
479 if (link_prefix) 479 if (link_prefix)
480 strcat(dest_buffer, link_prefix); 480 g_string_append(dest, link_prefix);
481 481
482 strcat(dest_buffer, buf); 482 g_string_append_len(dest, p, q - p);
483 strcat(dest_buffer, "\">"); 483 g_string_append(dest, "\">");
484 484
485 if (link_prefix) 485 if (link_prefix)
486 strcat(dest_buffer, link_prefix); 486 g_string_append(dest, link_prefix);
487 487
488 strcat(dest_buffer, buf); 488 g_string_append_len(dest, p, q - p);
489 strcat(dest_buffer, "</a>"); 489 g_string_append(dest, "</a>");
490 } 490 }
491 else 491 else
492 { 492 {
493 memcpy(buf, p, q - p); 493 g_string_append_len(dest, p, q - p);
494 buf[q - p] = '\0'; 494 }
495 strcat(dest_buffer, buf); 495
496 } 496 g_string_append(dest, "<br>\n");
497
498 strcat(dest_buffer, "<br>\n");
499 497
500 return TRUE; 498 return TRUE;
501 } 499 }
502 500
503 return FALSE; 501 return FALSE;