From 7e84168ee2e8eccefe5522def6b0a01c00b13767 Mon Sep 17 00:00:00 2001 From: Wilmer van der Gaast Date: Sat, 22 Jun 2013 22:50:15 +0100 Subject: #1067: Restore nickname truncation. --- nick.c | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'nick.c') diff --git a/nick.c b/nick.c index 65e36e54..54e180da 100644 --- a/nick.c +++ b/nick.c @@ -119,7 +119,8 @@ char *nick_gen( bee_user_t *bu ) while( fmt && *fmt && ret->len < MAX_NICK_LENGTH ) { - char *part = NULL, chop = '\0', *asc = NULL; + char *part = NULL, chop = '\0', *asc = NULL, *s; + int len = INT_MAX; if( *fmt != '%' ) { @@ -142,6 +143,13 @@ char *nick_gen( bee_user_t *bu ) } fmt += 2; } + else if( isdigit( *fmt ) ) + { + len = 0; + /* Grab a number. */ + while( isdigit( *fmt ) ) + len = len * 10 + ( *(fmt++) - '0' ); + } else if( g_strncasecmp( fmt, "nick", 4 ) == 0 ) { part = bu->nick ? : bu->handle; @@ -201,8 +209,16 @@ char *nick_gen( bee_user_t *bu ) part = asc = g_convert_with_fallback( part, -1, "ASCII//TRANSLIT", "UTF-8", "", NULL, NULL, NULL ); + if( chop && ( s = strchr( part, chop ) ) ) + len = MIN( len, s - part ); + if( part ) - g_string_append( ret, part ); + { + if( len < INT_MAX ) + g_string_append_len( ret, part, len ); + else + g_string_append( ret, part ); + } g_free( asc ); } -- cgit v1.2.3