=================================================================== RCS file: /cvsroot/gaim/gaim/src/util.c,v retrieving revision 1.325.2.19 retrieving revision 1.325.2.20 diff -u -r1.325.2.19 -r1.325.2.20 --- gaim/gaim/src/util.c 2005/04/28 04:02:10 1.325.2.19 +++ gaim/gaim/src/util.c 2005/05/06 00:13:37 1.325.2.20 @@ -1410,8 +1410,7 @@ gaim_markup_linkify(const char *text) { const char *c, *t, *q = NULL; - char *tmp, *tmpurlbuf; - char url_buf[BUF_LEN * 4]; + char *tmp, *tmpurlbuf, *url_buf; gunichar g; gboolean inside_html = FALSE; int inside_paren = 0; @@ -1467,11 +1466,11 @@ t--; } - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; + url_buf = g_strndup(c, t - c); tmpurlbuf = gaim_unescape_html(url_buf); g_string_append_printf(ret, "%s", tmpurlbuf, url_buf); + g_free(url_buf); g_free(tmpurlbuf); c = t; break; @@ -1500,12 +1499,12 @@ if ((*(t - 1) == ')' && (inside_paren > 0))) { t--; } - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; + url_buf = g_strndup(c, t - c); tmpurlbuf = gaim_unescape_html(url_buf); g_string_append_printf(ret, "%s", tmpurlbuf, url_buf); + g_free(url_buf); g_free(tmpurlbuf); c = t; break; @@ -1524,11 +1523,11 @@ if ((*(t - 1) == ')' && (inside_paren > 0))) { t--; } - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; + g_strndup(c, t - c); tmpurlbuf = gaim_unescape_html(url_buf); g_string_append_printf(ret, "%s", tmpurlbuf, url_buf); + g_free(url_buf); g_free(tmpurlbuf); c = t; break; @@ -1551,12 +1550,12 @@ if ((*(t - 1) == ')' && (inside_paren > 0))) { t--; } - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; + url_buf = g_strndup(c, t - c); tmpurlbuf = gaim_unescape_html(url_buf); g_string_append_printf(ret, "%s", tmpurlbuf, url_buf); + g_free(url_buf); g_free(tmpurlbuf); c = t; break; @@ -1572,11 +1571,11 @@ if (badchar(*t) || badentity(t)) { if (*(t - 1) == '.') t--; - strncpy(url_buf, c, t - c); - url_buf[t - c] = 0; + url_buf = g_strndup(c, t - c); tmpurlbuf = gaim_unescape_html(url_buf); g_string_append_printf(ret, "%s", tmpurlbuf, url_buf); + g_free(url_buf); g_free(tmpurlbuf); c = t; break; @@ -1590,15 +1589,15 @@ int flag; GString *gurl_buf; const char illegal_chars[] = "!@#$%^&*()[]{}/|\\<>\":;\r\n \0"; - url_buf[0] = 0; if (strchr(illegal_chars,*(c - 1)) || strchr(illegal_chars, *(c + 1))) flag = 0; - else + else { flag = 1; + gurl_buf = g_string_new(""); + } t = c; - gurl_buf = g_string_new(""); while (flag) { /* iterate backwards grabbing the local part of an email address */ g = g_utf8_get_char(t); @@ -1626,11 +1625,13 @@ if (badchar(*t) || (g >= 127) || (*t == ')') || badentity(t)) { char *d; - strcpy(url_buf, gurl_buf->str); + url_buf = g_string_free(gurl_buf, FALSE); /* strip off trailing periods */ - for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) - *d = '\0'; + if (strlen(url_buf) > 0) { + for (d = url_buf + strlen(url_buf) - 1; *d == '.'; d--, t--) + *d = '\0'; + } tmpurlbuf = gaim_unescape_html(url_buf); if (gaim_email_is_valid(tmpurlbuf)) { @@ -1639,6 +1640,7 @@ } else { g_string_append(ret, url_buf); } + g_free(url_buf); g_free(tmpurlbuf); c = t; @@ -1648,7 +1650,6 @@ t = g_utf8_find_next_char(t, NULL); } } - g_string_free(gurl_buf, TRUE); } if(*c == ')' && !inside_html) {