mirror of
				https://github.com/subsurface/subsurface.git
				synced 2025-02-19 22:16:15 +00:00 
			
		
		
		
	Fixed potential, rare corruption of unicode characters
In divelist.c:get_string(), when truncating the string to a maximum of 60 characters (to be shown in the divelist), make sure we are counting in guinchar (sizeof usually 2) instead of gchar (sizeof usually 1). Use Glib functions such as g_utf8_strlen() and g_utf8_strncpy() to do that. This patch fixes the potential problem when truncating a UTF-8 string by calculating its length using strlen() in bytes. For char = 1 byte, if the length returned by strlen() is an odd number this means there is at least one single byte length character in there. But also if the same string has a UTF-8 character at exactly the truncate position minus x(probably 1) bytes, we are going to split the bytes forming said UTF-8 char resulting in an incorrect string. Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
This commit is contained in:
		
							parent
							
								
									f2adb0cea6
								
							
						
					
					
						commit
						5468f19a05
					
				
					 1 changed files with 3 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -788,12 +788,11 @@ static void get_string(char **str, const char *s)
 | 
			
		|||
 | 
			
		||||
	if (!s)
 | 
			
		||||
		s = "";
 | 
			
		||||
	len = strlen(s);
 | 
			
		||||
	len = g_utf8_strlen(s, -1);
 | 
			
		||||
	if (len > 60)
 | 
			
		||||
		len = 60;
 | 
			
		||||
	n = malloc(len+1);
 | 
			
		||||
	memcpy(n, s, len);
 | 
			
		||||
	n[len] = 0;
 | 
			
		||||
	n = malloc(len * sizeof(gunichar) + 1);
 | 
			
		||||
	g_utf8_strncpy(n, s, len);
 | 
			
		||||
	*str = n;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue