aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--widgets/text/e-text.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/widgets/text/e-text.c b/widgets/text/e-text.c
index 0638134281..b2eb2ad3b0 100644
--- a/widgets/text/e-text.c
+++ b/widgets/text/e-text.c
@@ -807,7 +807,9 @@ calc_line_widths (EText *text)
clip_width >= 0) {
if (text->font) {
lines->ellipsis_length = 0;
- for (p = lines->text; p && *p && (p - lines->text) < lines->length; p = g_utf8_next_char (p)) {
+ for (p = lines->text;
+ p && *p && g_unichar_validate (g_utf8_get_char (p)) && (p - lines->text) < lines->length;
+ p = g_utf8_next_char (p)) {
gint text_width = text_width_with_objects (text->model,
text->font, text->style,
lines->text, p - lines->text);
@@ -3206,7 +3208,7 @@ _get_position(EText *text, ETextEventProcessorCommand *command)
p = g_utf8_next_char (text->text + text->selection_end);
- while (p && *p) {
+ while (p && *p && g_unichar_validate (g_utf8_get_char (p))) {
if (*p == '\n') {
new_pos = p - text->text;
p = NULL;
@@ -3253,7 +3255,7 @@ _get_position(EText *text, ETextEventProcessorCommand *command)
p = g_utf8_next_char (text->text + text->selection_end);
- while (p && *p) {
+ while (p && *p && g_unichar_validate (g_utf8_get_char (p))) {
unival = g_utf8_get_char (p);
if (g_unichar_isspace (unival)) {
new_pos = p - text->text;
@@ -3275,7 +3277,7 @@ _get_position(EText *text, ETextEventProcessorCommand *command)
if (p != text->text) {
p = g_utf8_find_prev_char (text->text, p);
- while (p && p > text->text) {
+ while (p && p > text->text && g_unichar_validate (g_utf8_get_char (p))) {
unival = g_utf8_get_char (p);
if (g_unichar_isspace (unival)) {
new_pos = g_utf8_next_char (p) - text->text;
@@ -3328,7 +3330,7 @@ _get_position(EText *text, ETextEventProcessorCommand *command)
}
p = g_utf8_find_prev_char (text->text, p);
- while (p && p > text->text) {
+ while (p && p > text->text && g_unichar_validate (g_utf8_get_char (p))) {
unival = g_utf8_get_char (p);
if (g_unichar_isspace (unival)) {
p = g_utf8_next_char (p);
@@ -3353,7 +3355,7 @@ _get_position(EText *text, ETextEventProcessorCommand *command)
p = g_utf8_next_char (text->text + text->selection_end);
- while (p && *p) {
+ while (p && *p && g_unichar_validate (g_utf8_get_char (p))) {
unival = g_utf8_get_char (p);
if (g_unichar_isspace (unival)) {
new_pos = p - text->text;