# HG changeset patch # User Mark Doliner # Date 1123808912 0 # Node ID 237d65590d2b1aa3c43572d3fff70d40c7bf285e # Parent fd6d96ef5c6d40edb49096292832fdf673867c5e [gaim-migrate @ 13388] Fix a potential crash substituting AIM away message strings. committer: Tailor Script diff -r fd6d96ef5c6d -r 237d65590d2b src/util.c --- a/src/util.c Thu Aug 11 20:45:36 2005 +0000 +++ b/src/util.c Fri Aug 12 01:08:32 2005 +0000 @@ -2301,8 +2301,7 @@ gaim_str_sub_away_formatters(const char *str, const char *name) { char *c; - gchar *cpy; - int cnt = 0; + GString *cpy; time_t t; struct tm *tme; char tmp[20]; @@ -2310,12 +2309,12 @@ g_return_val_if_fail(str != NULL, NULL); g_return_val_if_fail(name != NULL, NULL); - cpy = g_malloc(BUF_LONG); + /* Create an empty GString that is hopefully big enough for most messages */ + cpy = g_string_sized_new(1024); t = time(NULL); tme = localtime(&t); - cpy[0] = '\0'; c = (char *)str; while (*c) { switch (*c) { @@ -2324,39 +2323,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, "%I:%M:%S %p", 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); } } else { - 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; + + return g_string_free(cpy, FALSE); } gchar *