diff options
| author | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-01-26 20:28:31 +0200 | 
|---|---|---|
| committer | Andrey Kleshchev <andreykproductengine@lindenlab.com> | 2021-01-26 20:28:31 +0200 | 
| commit | a3d31ca683eb0744563b36d6432168fde6ae77d9 (patch) | |
| tree | 9e10f3260abe9e26e3a59b5bf0494d2a771e0cb2 | |
| parent | 0e4faf7d9c1b3772ef4bca3ea28348c178b906e2 (diff) | |
SL-14766 long unicode display names corrupt the conversation.log
Contribution by Beq Janus
| -rwxr-xr-x | doc/contributions.txt | 4 | ||||
| -rw-r--r-- | indra/newview/llconversationlog.cpp | 16 | 
2 files changed, 13 insertions, 7 deletions
| diff --git a/doc/contributions.txt b/doc/contributions.txt index c5d58cec9b..9340d69b97 100755 --- a/doc/contributions.txt +++ b/doc/contributions.txt @@ -264,10 +264,10 @@ Benja Kepler  Benjamin Bigdipper  Beq Janus  	BUG-227094 -Beth Walcher -Beq Janus  	SL-10288  	SL-13583 +	SL-14766 +Beth Walcher  Bezilon Kasei  Biancaluce Robbiani  	CT-225 diff --git a/indra/newview/llconversationlog.cpp b/indra/newview/llconversationlog.cpp index 9d78c528b6..fd59dd2601 100644 --- a/indra/newview/llconversationlog.cpp +++ b/indra/newview/llconversationlog.cpp @@ -535,7 +535,9 @@ bool LLConversationLog::loadFromFile(const std::string& filename)  	}  	bool purge_required = false; -	char buffer[MAX_STRING]; +	static constexpr int UTF_BUFFER{ 1024 }; // long enough to handle the most extreme Unicode nonsense and some to spare + +	char buffer[UTF_BUFFER];  	char conv_name_buffer[MAX_STRING];  	char part_id_buffer[MAX_STRING];  	char conv_id_buffer[MAX_STRING]; @@ -546,11 +548,14 @@ bool LLConversationLog::loadFromFile(const std::string& filename)  	// before CHUI-348 it was a flag of conversation voice state  	int prereserved_unused; -	while (!feof(fp) && fgets(buffer, MAX_STRING, fp)) +	memset(buffer, '\0', UTF_BUFFER); +	while (!feof(fp) && fgets(buffer, UTF_BUFFER, fp))  	{ -		conv_name_buffer[0] = '\0'; -		part_id_buffer[0]	= '\0'; -		conv_id_buffer[0]	= '\0'; +        // force blank for added safety +        memset(conv_name_buffer, '\0', MAX_STRING); +        memset(part_id_buffer, '\0', MAX_STRING); +        memset(conv_id_buffer, '\0', MAX_STRING); +        memset(history_file_name, '\0', MAX_STRING);  		sscanf(buffer, "[%lld] %d %d %d %[^|]| %s %s %[^|]|",  				&time, @@ -587,6 +592,7 @@ bool LLConversationLog::loadFromFile(const std::string& filename)  		}  		mConversations.push_back(conversation); +		memset(buffer, '\0', UTF_BUFFER);  	}  	fclose(fp); | 
