mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-18 20:10:29 +01:00
WINGs: fix infinite loop when using Pango on string that have to be split
As reported by Charles Philip Chan, WPrefs would get into infinite loop when the support for Pango is enabled. The problem is due to long strings that are broken into multiple lines by WINGs. This is done in an iterative process in the internal function 'fitText'. In order to avoid the cost of duplicating many times the sub-strings, the functions involved do not place a NUL at the string-splitting position, but they rely instead on giving the length of the string as a parameter. The code that checks the Pango text (to avoid re-submitting the string when not needed) did not use that length, so it would always keep the original string that is too long, so the fitText function would always receive the same result and loop forever trying to find where to split the string. This patch adds the check on the length, so Pango is given the appropriate string for its pixel size calculation. Signed-off-by: Christophe CURIS <christophe.curis@free.fr>
This commit is contained in:
committed by
Carlos R. Mafra
parent
88352b7274
commit
4f050ebab9
@@ -295,7 +295,7 @@ int WMWidthOfString(WMFont * font, const char *text, int length)
|
||||
wassertrv(font != NULL && text != NULL, 0);
|
||||
#ifdef USE_PANGO
|
||||
previous_text = pango_layout_get_text(font->layout);
|
||||
if ((previous_text == NULL) || (strcmp(text, previous_text) != 0))
|
||||
if ((previous_text == NULL) || (strncmp(text, previous_text, length) != 0) || previous_text[length] != '\0')
|
||||
pango_layout_set_text(font->layout, text, length);
|
||||
pango_layout_get_pixel_size(font->layout, &width, NULL);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user