--- gaim-0.59.9/src/util.c.vulnerable 2005-08-08 22:32:07.000000000 -0400 +++ gaim-0.59.9/src/util.c 2005-08-08 23:14:44.000000000 -0400 @@ -664,14 +664,16 @@ or time */ char *away_subs(char *msg, char *name) { + gchar *retval; char *c; - static char cpy[BUF_LONG]; - int cnt = 0; + GString *cpy; time_t t = time(0); struct tm *tme = localtime(&t); char tmp[20]; - cpy[0] = '\0'; + /* Create an empty GString that is hopefully big enough for most messages */ + cpy = g_string_sized_new(1024); + c = msg; while (*c) { switch (*c) { @@ -680,36 +682,35 @@ switch (*(c + 1)) { case 'n': /* append name */ - strcpy(cpy + cnt, name); - cnt += strlen(name); + g_string_append(cpy, name); c++; break; case 'd': /* append date */ strftime(tmp, 20, "%m/%d/%Y", tme); - strcpy(cpy + cnt, tmp); - cnt += strlen(tmp); + g_string_append(cpy, tmp); c++; break; case 't': /* append time */ strftime(tmp, 20, "%r", tme); - strcpy(cpy + cnt, tmp); - cnt += strlen(tmp); + g_string_append(cpy, tmp); c++; break; default: - cpy[cnt++] = *c; + g_string_append_c(cpy, *c); } } break; default: - cpy[cnt++] = *c; + g_string_append_c(cpy, *c); } c++; } - cpy[cnt] = '\0'; - return (cpy); + + retval = cpy->str; + g_string_free(cpy, FALSE); + return retval; } char *stylize(gchar *text, int length)