GUCAMOLE-149: Merge zero-width character fix for potential infinite loop.
This commit is contained in:
commit
4da4ce7279
@ -182,6 +182,10 @@ void guac_terminal_buffer_set_columns(guac_terminal_buffer* buffer, int row,
|
|||||||
int i, j;
|
int i, j;
|
||||||
guac_terminal_char* current;
|
guac_terminal_char* current;
|
||||||
|
|
||||||
|
/* Do nothing if glyph is empty */
|
||||||
|
if (character->width == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Build continuation char (for multicolumn characters) */
|
/* Build continuation char (for multicolumn characters) */
|
||||||
guac_terminal_char continuation_char;
|
guac_terminal_char continuation_char;
|
||||||
continuation_char.value = GUAC_CHAR_CONTINUATION;
|
continuation_char.value = GUAC_CHAR_CONTINUATION;
|
||||||
|
@ -438,6 +438,10 @@ void guac_terminal_display_set_columns(guac_terminal_display* display, int row,
|
|||||||
int i;
|
int i;
|
||||||
guac_terminal_operation* current;
|
guac_terminal_operation* current;
|
||||||
|
|
||||||
|
/* Do nothing if glyph is empty */
|
||||||
|
if (character->width == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
/* Ignore operations outside display bounds */
|
/* Ignore operations outside display bounds */
|
||||||
if (row < 0 || row >= display->height)
|
if (row < 0 || row >= display->height)
|
||||||
return;
|
return;
|
||||||
|
@ -657,18 +657,21 @@ char* guac_terminal_prompt(guac_terminal* terminal, const char* title,
|
|||||||
|
|
||||||
int guac_terminal_set(guac_terminal* term, int row, int col, int codepoint) {
|
int guac_terminal_set(guac_terminal* term, int row, int col, int codepoint) {
|
||||||
|
|
||||||
int width;
|
/* Calculate width in columns */
|
||||||
|
int width = wcwidth(codepoint);
|
||||||
/* Build character with current attributes */
|
|
||||||
guac_terminal_char guac_char;
|
|
||||||
guac_char.value = codepoint;
|
|
||||||
guac_char.attributes = term->current_attributes;
|
|
||||||
|
|
||||||
width = wcwidth(codepoint);
|
|
||||||
if (width < 0)
|
if (width < 0)
|
||||||
width = 1;
|
width = 1;
|
||||||
|
|
||||||
guac_char.width = width;
|
/* Do nothing if glyph is empty */
|
||||||
|
else if (width == 0)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Build character with current attributes */
|
||||||
|
guac_terminal_char guac_char = {
|
||||||
|
.value = codepoint,
|
||||||
|
.attributes = term->current_attributes,
|
||||||
|
.width = width
|
||||||
|
};
|
||||||
|
|
||||||
guac_terminal_set_columns(term, row, col, col + width - 1, &guac_char);
|
guac_terminal_set_columns(term, row, col, col + width - 1, &guac_char);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user