diff options
author | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-04-24 15:23:41 +0400 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rambler-co.ru> | 2009-04-24 15:23:41 +0400 |
commit | 521c2b24b92d2085629d0e34d18110b3a643a77a (patch) | |
tree | 44a264c37e7b0fd6e021cb4a99189f95fd274dd8 /src/plugins/chartable.c | |
parent | 0cc688fe0be5662e761639d853745153a13522f2 (diff) | |
download | rspamd-521c2b24b92d2085629d0e34d18110b3a643a77a.tar.gz rspamd-521c2b24b92d2085629d0e34d18110b3a643a77a.zip |
* Validate utf8 chars to avoid crashes
Diffstat (limited to 'src/plugins/chartable.c')
-rw-r--r-- | src/plugins/chartable.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/plugins/chartable.c b/src/plugins/chartable.c index fe2ed858e..d05912f57 100644 --- a/src/plugins/chartable.c +++ b/src/plugins/chartable.c @@ -142,14 +142,23 @@ check_part (struct mime_text_part *part, gboolean raw_mode) } else { while (remain > 0) { - c = g_utf8_get_char (p); + c = g_utf8_get_char_validated (p, remain); + if (c == (gunichar)-2 || c == (gunichar)-1) { + /* Invalid characters detected, stop processing*/ + return FALSE; + } + scc = g_unichar_get_script (c); p1 = g_utf8_next_char (p); remain -= p1 - p; p = p1; if (remain > 0) { - t = g_utf8_get_char (p); + t = g_utf8_get_char_validated (p, remain); + if (c == (gunichar)-2 || c == (gunichar)-1) { + /* Invalid characters detected, stop processing*/ + return FALSE; + } sct = g_unichar_get_script (t); if (g_unichar_isalnum (c) && g_unichar_isalnum (t)) { /* We have two unicode alphanumeric characters, so we can check its script */ |