Mercurial > pidgin.yaz
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; |